设计模式-工厂模式(简单工厂)

工厂模式

属于[创建型],分为简单工厂、工厂方法、抽象工厂。

1.简单工厂模式

针对接口编程,封装变化。

public class PizzaStore {
    
    // 预定一个pizza
    Pizza orderPizza(String type) {
        // new一个pizza
        Pizza pizza = null;
        if ("cheese".equals(type)) {
            pizza = new CheesePizza();
        } else if ("veggie".equals(type)) {
            pizza = new VeggiePizza();
        }

        // 准备食材
        pizza.prepare();
        // 烘焙
        pizza.bake();
        // 装盒
        pizza.box();

        return pizza;
    }
}

5-11行的创建一个pizza针对具体编程,可以先抽离出来

public class PizzaStore {

    // 预定一个pizza
    Pizza orderPizza(String type) {
        // new一个pizza
        Pizza pizza = createPizza(type);

        // 准备食材
        pizza.prepare();
        // 烘焙
        pizza.bake();
        // 装盒
        pizza.box();

        return pizza;
    }

    public Pizza createPizza(String type) {
        Pizza pizza = null;
        if ("cheese".equals(type)) {
            pizza = new CheesePizza();
        } else if ("veggie".equals(type)) {
            pizza = new VeggiePizza();
        }
        return pizza;
    }
}

然后把16-24行createPizza封装到简单工厂中。工厂处理创建对象的细节,而orderPizza只关心从工厂得到一个Pizza,不用关心创建哪个Pizza对象。

public class SimplePizzaFactory {

    public Pizza createPizza(String type) {
        Pizza pizza = null;
        if ("cheese".equals(type)) {
            pizza = new CheesePizza();
        } else if ("veggie".equals(type)) {
            pizza = new VeggiePizza();
        }
        return pizza;
    }
}
public class PizzaStore {
    // 预定一个pizza
    Pizza orderPizza(String type) {
        // new一个pizza
        Pizza pizza = new SimplePizzaFactory().createPizza(type);

        // 准备食材
        pizza.prepare();
        // 烘焙
        pizza.bake();
        // 装盒
        pizza.box();

        return pizza;
    }
}

createPizza放到SimplePizzaFactory工厂类中的理由是:SimplePizzaFactory可以有许多客户,虽然此处只看到orderPizza()方法中引用到了。所以把创建Pizza代码包装进一个类,当以后实现改变时,只需要修改这个类即可。

组合PizzaStore类中17行new SimplePizzaFactory()。

我们知道对象组合可以在运行时动态改变行为,因为我们可以更换不同的实现。

public class PizzaStore {

    SimplePizzaFactory factory;

    public PizzaStore(SimplePizzaFactory factory) {
        this.factory = factory;
    }

    // 预定一个pizza
    Pizza orderPizza(String type) {
        // new一个pizza
        Pizza pizza = factory.createPizza(type);

        // 准备食材
        pizza.prepare();
        // 烘焙
        pizza.bake();
        // 装盒
        pizza.box();

        return pizza;
    }
}

以上即为简单工厂模式介绍。

2.工厂方法模式

待完善

3.抽象工厂模式

待完善

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值