简单工厂模式
简单工厂模式,又叫作静态工厂方法模式,其属于创建型设计模式,但是并不属于23中GoF设计模式之一。是由一个工厂对象决定创建出哪一种产品类的实例。
在简单工厂模式中有如下角色:
- Factory:工厂类,这是简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象;
- IProduct:抽象产品类,这是简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口;
- Product:具体产品类,这是简单工厂模式的创建目标;
简单工厂模式的简单实现
用生产计算机来举例,假设一个计算机的代工厂商,它目前已经可以代工生产联想计算机了。随着业务的拓展,这个代工生产商还要生产惠普和华硕的计算机。这样就我们就需要一个单独的类来专门生产计算机,这就用到了简单工厂模式。
抽象产品类
我们创建一个计算机的抽象产品类,其有一个抽象方法用于启动计算机,如下:public abstract class Computer{ //产品的抽象方法,由具体的产品类实现;
public abstract void start();
}
1. 具体产品类
  接着我们创建各个品牌的计算机,其都继承了自己的父类Computer,并实现了父类的start()方法,具体的计算机产品分别是联想、惠普、华硕计算机。
```java
public class LenovoComputer extends Computer{
@Override
public void start(){
System.out.println("联想计算机");
}
}
public class HpComputer extends Computer{
@Override
public void start(){
System.out.println("惠普计算机");
}
}
public class AsusComputer extends Computer{
@Override
public void start(){
System.out.println("华硕计算机");
}
}
工厂类
接下来创建一个工厂类,它提供一个静态方法createComputer()用来生产计算机。只需要传入想生产的计算机品牌,就会实例化相应的品牌的计算机对象。public class ComputerFactory{ public static Computer createComputer(String type){
Computer computer = null;
switch(type){
case "lenove":
computer = new LenovoComputer();
break;
case "hp":
computer = new HpComputer();
break;
case "asus":
computer = new AsusComputer();
break;
default:
break;
}
return computer;
}
}客户端调用工厂类
客户端调用工厂类,传入"hp"生产出惠普计算机并调用该计算机对象的start()方法。public class CreateComputer{ public static void main(String[] args){
ComputerFactory.createComputer("hp").start();
}
}
使用简单工厂模式的场景和优缺点
- 使用场景:
- 工厂类负责创建的对象比较少;
- 客户只需要知道传入工厂类的参数,而无需关心创建对象的逻辑;
- 优点:使用户根据参数获得对应的类实例,避免了直接实例化类,降低了耦合性;
- 缺点:可实例化的类型在编译期间已经被确定。如果增加新类型,则需要修改工厂,这违背了开放封闭原则。简单工厂需要知道所有要生成的类型,当其子类过多或者子类层级过多时不适合使用;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
---------------------last line for now-------------------