工厂模式
对用户屏蔽对象的实例化的逻辑,降低了代码的耦合度,比方说我需要一台电脑,我不需要关心电脑的cpu、内存、主板怎么生产组装,只需要给用户一台组装好的机器即可,当我需要一台笔记本的时候,工厂只需要新增一个新的组装笔记本的逻辑即可。
工厂应该是一个抽象的结构,具体的实例化应该交给实现类来增加拓展性。
简单工厂模式
- 工厂(电脑组装工厂)
- 产品类(电脑)
- 产品实现 (笔记本、台式机)
问题
新增类型需要改动工厂,对象实例化都放在工厂内耦合度太高
实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| public abstract class Computer {} public class Notebook extends Computer {} public class Desktop extends Computer {}
public class ComputerFactory(){
public Computer getComputer(String type) { Computer computer = null; switch () { case "notebook": computer = new Notebook(); break; case "desktop": computer = new Desktop(); break
default: throw new Exception("不支持的类型") } return computer; } }
|
工厂方法模式
可以简单理解为把工厂在抽象一层拆开成不同的desktop工厂、notebook工厂,把简单工厂里面的耦合实例化逻辑拆到具体的工厂上
- 工厂方法 (工厂接口)
- 工厂实现(笔记本工厂、台式机工厂)
- 产品类 (电脑)
- 产品实现 (笔记本、台式机)
问题
项目中类的数量变多
实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public interface Factory { computer create() }
public class NotebookFactory implements Facotry { public Notebook create() { return new Notebook(); }
} public class DesktopFactory implements Facotry { public Desktop create() { return new Desktop(); } }
|