简单工厂模式
定义:简单的工厂模式属于创建型模式,又被称为静态工厂方法模式。
- Factory:工厂类,这是简单工厂模式的核心,负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。
- IProduct:抽象产品类,创建所有对象的父类,它复制描述所有实例所共有的公共接口。
- Product:具体产品类,创建具体的实例对象。
- 抽象产品类
创建一个计算机抽象产品类,代码如下:
public abstract class Computer {
/**
* 产品的抽象方法,
*/
public abstract void start();
}
- 具体产品类
具体的计算机产品分别是联想,惠普和华硕计算机:
public class HpComputer extends Computer {
@Override
public void start() {
System.out.println("HpComputer.start 惠普电脑");
}
}
public class LenovoComputer extends Computer {
@Override
public void start() {
System.out.println("LenovoComputer.start 联想电脑");
}
}
public class AsusComputer extends Computer {
@Override
public void start() {
System.out.println("AsusComputer.start 华硕电脑");
}
}
- 工厂类
工厂类提供了一个静态方法 createComputer用来生产计算机。我们只需要传入自己想生产的计算机的品牌,它就会实例化相应品牌的计算机对象。
public class Computerfactory {
public static Computer createComputer(String type) {
Computer computer = null;
switch (type) {
case "hp":
computer = new HpComputer();
break;
case "asus":
computer = new AsusComputer();
break;
case "leovo":
computer = new LenovoComputer();
break;
default:
break;
}
return computer;
}
public static void main(String[] args) {
Computerfactory computerfactory = new Computerfactory();
Computerfactory.createComputer("hp").start();
Computerfactory.createComputer("leovo").start();
Computerfactory.createComputer("asus").start();
}
}
简单工厂模式的场景和优缺点
使用场景:
- 工厂类负责创建的对象较少。
- 客户只用知道传入工厂的参数,并不需要关心创建对象的逻辑。
优点:使用户根据参数获得对应的类实例,避免了直接实例化类,降低了耦合性。
- 缺点:可实例化的类型在编译期间已经被确定。如果增加新类型,则需要修改工厂,这违背了开放封闭原则。简单工厂需要知道所有要生成的类型,当子类过多或者子类层次过多时不适合使用。