简单工厂模式代码示例

一. 抽象接口INoodles:

package designpattern.factory.simplefactory.noodles;

public interface INoodles {
    /**
     * 描述每种面条啥样的
     */
    public abstract void desc();
}

二. 接口实现类:

LzNoodles:

package designpattern.factory.simplefactory.noodles;

public class LzNoodles implements INoodles {
    @Override
    public void desc() {
        System.out.println("兰州拉面,兰州特色小吃");
    }
}

PaoNoodles:

package designpattern.factory.simplefactory.noodles;

public class PaoNoodles implements INoodles {
    @Override
    public void desc() {
        System.out.println("泡面,程序员必备");
    }
}

ReganNoodles:

package designpattern.factory.simplefactory.noodles;

public class ReganNoodles implements INoodles {
    @Override
    public void desc() {
        System.out.println("红油热干面,武汉特色小吃");
    }
}

三. 简单工厂类:

package designpattern.factory.simplefactory;

import designpattern.factory.simplefactory.noodles.INoodles;
import designpattern.factory.simplefactory.noodles.LzNoodles;
import designpattern.factory.simplefactory.noodles.PaoNoodles;
import designpattern.factory.simplefactory.noodles.ReganNoodles;

/**
 * 简单工厂模式
 * 一家“简单面馆”(简单工厂类)
 */
public class SimpleNoodlesFactory {

    public static final int TYPE_LZ = 1;//兰州拉面
    public static final int TYPE_PM = 2;//泡面
    public static final int TYPE_GK = 3;//热干面

    /**
     * 如果生产对象的方法是static的,这种简单工厂也叫做静态工厂
     * 如果生产对象的方法不是static的,这种简单工厂也叫做实例工厂
     * @param type
     * @return
     */
    public static INoodles createNoodles(int type) {
        switch (type) {
            case 1:
                return new LzNoodles();
            case 2:
                return new PaoNoodles();
            case 3:
                return new ReganNoodles();
            default:
                return new LzNoodles();
        }
    }
}

四. 测试类

package designpattern.factory.simplefactory;

import designpattern.factory.simplefactory.noodles.INoodles;
import designpattern.factory.simplefactory.noodles.LzNoodles;

public class Test {

    public static void main(String[] args) {
        /**
         *  一开始,穷,想吃面必须得自己做
         *  想吃拉面得自己做,new LzNoodles()
         *  想吃泡面得自己做,new PaoNoodles()
         *  想吃热干面得自己做,new ReganNoodles()
         */
        // 做拉面吃
        INoodles lzNoodles = new LzNoodles();
        // 做泡面吃
        // INoodles paoNoodles = new PaoNoodles();
        // 做热干面吃
        // INoodles reganNoodles = new ReganNoodles();

        // 然而,new来new去,改来改去,好心烦......

        /**
         * 忽然,有一天走了狗屎运成了暴发户
         * 幸福生活从此来临,吃面从此变得简单
         * 给面馆说一声想吃啥,面馆做好了给自己就好了
         * 自己不必关心面条怎么做(怎么new,如何new)让面馆操心去吧(面馆帮我们new)!
         * 好省心,有钱就是好,太爽了!
         */
        INoodles iNoodles = SimpleNoodlesFactory.createNoodles(2);  // 和具体的对象脱离关系
        iNoodles.desc();

        /**考虑使用工厂模式
         * 1) 当客户程序不需要知道要使用对象的创建过程。
         * 2) 客户程序使用的对象存在变动的可能,或者根本就不知道使用哪一个具体的对象。
         */
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的 Java 抽象工厂模式的示例代码: ``` // 定义一个产品接口 interface Product { void use(); } // 具体产品1 class ConcreteProduct1 implements Product { @Override public void use() { System.out.println("使用具体产品1"); } } // 具体产品2 class ConcreteProduct2 implements Product { @Override public void use() { System.out.println("使用具体产品2"); } } // 抽象工厂接口 interface AbstractFactory { Product createProduct1(); Product createProduct2(); } // 具体工厂1 class ConcreteFactory1 implements AbstractFactory { @Override public Product createProduct1() { return new ConcreteProduct1(); } @Override public Product createProduct2() { return new ConcreteProduct2(); } } // 具体工厂2 class ConcreteFactory2 implements AbstractFactory { @Override public Product createProduct1() { return new ConcreteProduct2(); } @Override public Product createProduct2() { return new ConcreteProduct1(); } } // 测试代码 public class Client { public static void main(String[] args) { AbstractFactory factory1 = new ConcreteFactory1(); Product product1 = factory1.createProduct1(); Product product2 = factory1.createProduct2(); product1.use(); product2.use(); AbstractFactory factory2 = new ConcreteFactory2(); Product product3 = factory2.createProduct1(); Product product4 = factory2.createProduct2(); product3.use(); product4.use(); } } ``` 在上面的代码中,我们定义了一个 `Product` 接口和两个具体产品类 `ConcreteProduct1` 和 `ConcreteProduct2`。接着定义了一个 `AbstractFactory` 抽象工厂接口,其中的 `createProduct1()` 和 `createProduct2()` 方法分别用于创建两种不同类型的产品对象。然后我们定义了两个具体工厂类 `ConcreteFactory1` 和 `ConcreteFactory2`,它们都实现了 `AbstractFactory` 接口并分别实现了 `createProduct1()` 和 `createProduct2()` 方法。最后在测试代码中,通过不同的具体工厂类创建了不同类型的产品对象并调用了它们的 `use()` 方法。 这就是一个简单的 Java 抽象工厂模式的示例代码,希望能帮助到你。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值