设计模式 - 简单工厂
程序员文章站
2022-06-13 13:09:20
...
01 简单工厂
- 定义: 由一个工厂对象决定创建出哪一种产品类的实例。
- 类型:创建型,但不属于GOF23种设计模式中的一个。
- 后续的工厂方法,抽象工厂都是由简单工厂来演变
- 不依赖对应的实现类
应用场景
- 工厂类负责创建的对象比较少
- 客户端只知道传入工厂类的参数对于如何创建对象具体逻辑不关心。
- 优点:只需要传入一个正确的参数,就可以获取你所需要的对象,无需知道其创建的细节。
- 缺点:工程类职责相对过重,如果添加新的产品需要修改工厂类的判断逻辑,违背开闭原则。
代码案例
- 场景: 生产不同的电脑-- 苹果电脑 联想电脑等
- 电脑抽象类/接口
public interface Computer {
/**
* 生产电脑
*/
void produce();
}
- 苹果电脑的生产方式
public class AppleComputer implements Computer{
public void produce() {
System.out.println("苹果电脑");
}
}
- 联想电脑的生产方式
public class LenovoComputer implements Computer{
public void produce() {
System.out.println("联想电脑");
}
}
- 通过工厂进行生产电脑
public class ComputerFactory {
public Computer getComputer(String name){
if("apple".equalsIgnoreCase(name)){
return new AppleComputer();
} else if("lenovo".equalsIgnoreCase(name)){
return new LenovoComputer();
}else {
return null;
}
}
}
- 传统的创建方式测试
public class SimplefactoryTest {
public static void main(String[] args) {
//原始的获取对象
Computer computer = new AppleComputer();
computer.produce(); //苹果电脑
Computer computer1 = new LenovoComputer();
computer1.produce(); // 联想电脑
}
}
-
传统的创建对象的UML类图
-
由类图可知,Test类(获取方)必须要依赖具体的生产电脑的实例,才能获取到对应的电脑。
-
采用简单工厂进行调用
public class SimplefactoryTest {
public static void main(String[] args) {
//用简单工厂的方式创建对象
ComputerFactory computerFactory = new ComputerFactory();
Computer computer = computerFactory.getComputer("apple");
computer.produce(); //苹果电脑
Computer computer1 = computerFactory.getComputer("lenovo");
computer1.produce();// 联想电脑
}
}
-
简单工厂的类图
-
由类图可知,Test(获取方)不需要直接依赖具体的创建电脑的实例,只需要依赖工厂即可,就可以获取到对应的电脑。
源码地址
- 设计模式的其他源码地址都在这里哦! 源码地址
上一篇: PHP+Ajax实现分页技术
下一篇: 设计模式-简单工厂