模式简介
简单工厂又称静态工厂,模式简而言之就是通过多态的方式,将类的创建交给工厂,降低程序的耦合度。
举例
比如我们平时使用的电脑,有联想的、苹果等等,现在交给一个专门生产电脑的工厂去生产。
- 抽象工厂接口
// 定义抽象接口,供具体的子类去实现
public interface Computer {
void produce();
}
- 联想电脑
// 具体实现类
public class LenovoComputer implements Computer{
@Override
public void produce() {
System.out.println("生产联想电脑...");
}
}
- 苹果电脑
// 定义实现类
public class AppleComputer implements Computer{
@Override
public void produce() {
System.out.println("生产苹果电脑...");
}
}
- 定义静态工厂,生产电脑
// 定义工厂 静态方法
public class ComputerFactory {
// 根据不同的 type,来判断返回哪一个子类
public static Computer getComputer(String type) {
Computer myComputer = null;
switch(type) {
case "lenovo": myComputer = new LenovoComputer();break;
case "apple" : myComputer = new AppleComputer();break;
default: myComputer = new LenovoComputer();break;
}
return myComputer;
}
}
- 使用测试
public class Test {
public static void main(String[] args) {
Computer myComputer = ComputerFactory.getComputer("lenovo");
// 生产联想电脑...
myComputer.produce();
}
}
优点
工厂包含创建不同对象的逻辑,根据客户端的选择条件动态的实例化相关的对象,对于客户端而言,去除了与具体产品的依赖。客户端不需要通过new Object() 的方式去创建对象。
缺点
每新增一个产品时,都需要新增一个子类,修改工厂方法的判断逻辑,违背了 开闭原则。