前言
简单工厂模式,又叫做静态工厂方法模式。属于创建型工厂模式,但是不属于23中设计模式。学习简单工厂模式,是为了更好地学习工厂方法模式。
定义
简单工厂模式,即静态工厂方法模式,是由一个工厂对象决定创建出哪一种产品类型的实例。
结构模型
角色拆解分析:
Factory工厂类:简单工厂模式的核心,负责实现创建所有实例的内部逻辑。工厂类中创建产品类的方法可以被外部调用,创建所需的产品对象。
Product具体产品类:是创建目标
ProductX抽象产品类:创建的所有对象的父类,负责描述所有实例所共有的公共接口
简单实现
还是以笔记本电脑为例吧!
1.抽象产品类ProductX(父类)
public abstract class Computer{
//产品的抽象方法
public abstract void start();
}
2.具体产品类Product:
//美帝良心想
public class LenovoComputer extends Computer {
@Override
public void start() {
System.out.print("美帝良心想启动了");
}
}
//铁板熊掌普
public class HpComputer extends Computer {
@Override
public void start() {
System.out.print("铁板熊掌普开机了...");
}
}
3.工厂类Factory:
创建各种类型的笔记本电脑对象
public class ComputerFactory {
public static Computer createComputer(String type){
Computer computer=null;
switch (type){
case "lenovo":
computer = new LenovoComputer();
break;
case "hp":
computer = new HpComputer();
break;
}
return computer;
}
}
4.客户端调用工厂类
客户端直接调用工厂类的制造方法,并开机
public class UserClient {
public static void main(String []args){
//用户要求组装铁板熊掌普并开机
ComputerFactory.createComputer("hp").start();
}
}
优缺点
优点:用户直接输入参数即可得到对应的实例化对象,避免了直接实例化类,降低了耦合度
缺点:可实例化的类型在编译期间就确定了,增加新的类型意味着要修改工厂,违背了开放封闭原则。该模式需要提前知道所有要生成的类型,如果子类过多或者子类层次过多时不宜使用
使用场景
1.工厂类负责创建的对象比较少;
2.客户只需要知道传入工厂类的参数,不用关心创建对象的逻辑;