工厂模式

工厂模式

对用户屏蔽对象的实例化的逻辑,降低了代码的耦合度,比方说我需要一台电脑,我不需要关心电脑的cpu、内存、主板怎么生产组装,只需要给用户一台组装好的机器即可,当我需要一台笔记本的时候,工厂只需要新增一个新的组装笔记本的逻辑即可。

工厂应该是一个抽象的结构,具体的实例化应该交给实现类来增加拓展性。

简单工厂模式

  1. 工厂(电脑组装工厂)
  2. 产品类(电脑)
  3. 产品实现 (笔记本、台式机)

问题

新增类型需要改动工厂,对象实例化都放在工厂内耦合度太高

实现

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. 产品实现 (笔记本、台式机)

问题

项目中类的数量变多

实现

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();
}
}