开头说几句
博主的博客地址:https://www.jeffcc.top/
推荐入门学习设计模式 java 版本的数据 Head First 《设计模式》
什么是工厂方法模式
专业定义:工厂方法模式定义了一个创建对象的接口,但是由子类决定实例化的类是哪一个。工厂方法让实例化延迟到了子类。
博主的理解:工厂方法其实也是使用了把不变的部分和变化的部分分开封装起来的设计原则,将变化的部分提供一个抽象方法来交给子类来实现,不变的部分由工厂完成封装。
这种设计可以将对象的创建封装起来,以便得到更加松耦合,更有弹性的设计。
设计原则
- 依赖倒置原则,要依赖抽象,不要依赖具体类,具体做法是需要高层组件(工厂)和底层组件(实现类)之间不要有太多的依赖关系,而是可以通过一个共同的抽象类(工厂产生的对象)来实现依赖倒置。
- 多用组合,少用继承。
- 针对接口编程,而不是针对实现编程。
- 为交互对象之间的松耦合设计而努力。
- 类应该对外开放拓展,对修改关闭。
设计要点
- 所有的工厂都是用来封装对象的创建的。
- 工厂方法使用继承,把对象的创建委托给子类,子类实现工厂方法来创建对象。
- 工厂方法允许类的实例化延迟到子类。
设计实现
设计背景
一家披萨店需要拓展加盟业务,届时会有许多不同地方口味的披萨出现,而我们需要做的就是设计一个工厂来让加盟商使用,具体的风味的披萨由加盟商自己决定,工厂只负责包装等内容。
代码实现
项目结构
项目类图
披萨工厂
ChicagoPizzaStore 加盟店
NYpizza 加盟店
披萨抽象类(关键)
ChicagoStyleCheesePizza
NYStyleCheesePizza
测试买 pizza
输出结果
最后说两句
工厂方法让子类决定要实例化的类是哪一个,这句话的理解并不是指模式允许子类本身在运行时做出决定,而是要在编写创建者类的时候,不需要知道实际所创建的产品是哪一个,选择了使用哪一个子类,也就“决定”了实际创建的产品是什么。
接下来会出一篇关于抽象工厂模式的文章 和工厂方法模式有一定的相通性。
END
2019 年 9 月 4 日 09:20:13
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于