工厂模式

背景

工厂模式,顾名思义,就是生产对象的一种方式。传统使用new的方法有一些弊端:耦合问题,构造参数太多后不便等。

下面我们从一个示范,来看看使用new会遇到哪些问题。

public interface Pizza {
    void prepare();
    void bake();
    void cut();
    void box();
}
public class CheesePizza implements Pizza {
    public void prepare() {}
    public void bake() {}
    public void cut() {}
    public void box() {}
}
    Pizza orderPizza(String type) throws Exception {
        Pizza pizza;
        // 当增加/删除特定类型的pizza时, 这里的代码会频繁改动
        if (type.equals("cheese")) {
            pizza = new CheesePizza();
        } else if (type.equals("greek")) {
            pizza = new GreekPizza();
        } else {
            throw new Exception("no type pizza. type=" + type);
        }
        // 下面的部分代码不会改变
        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();
        return pizza;
    }

将频繁改动的代码封装起来

public class SimplePizzaFactory {
    public Pizza createPizza(String type) throws Exception {
        Pizza pizza;
        // 当增加/删除特定类型的pizza时, 这里的代码会频繁改动
        if (type.equals("cheese")) {
            pizza = new CheesePizza();
        } else if (type.equals("greek")) {
            pizza = new GreekPizza();
        } else {
            throw new Exception("no type pizza. type=" + type);
        }
        return pizza;
    }
}

以上封装有几点说明如下:

  • 以后关于创建对象的改动都只需改动这一处代码,方便管理
  • 创建对象的方法也可以定义为一个静态方法,常被称为静态工厂。但这样一来,就不能够通过继承来改变创建方法的行为。

工厂模式定义

工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

工厂模式类图如下:todo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容