简单工厂模式

  简单工厂模式,又叫作静态工厂方法模式,其属于创建型设计模式,但是并不属于23中GoF设计模式之一。是由一个工厂对象决定创建出哪一种产品类的实例。
  在简单工厂模式中有如下角色:

  • Factory:工厂类,这是简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象;
  • IProduct:抽象产品类,这是简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口;
  • Product:具体产品类,这是简单工厂模式的创建目标;

简单工厂模式的简单实现

  用生产计算机来举例,假设一个计算机的代工厂商,它目前已经可以代工生产联想计算机了。随着业务的拓展,这个代工生产商还要生产惠普和华硕的计算机。这样就我们就需要一个单独的类来专门生产计算机,这就用到了简单工厂模式。

  1. 抽象产品类
      我们创建一个计算机的抽象产品类,其有一个抽象方法用于启动计算机,如下:

    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("华硕计算机");
    }
}
  1. 工厂类
      接下来创建一个工厂类,它提供一个静态方法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;
    }
    }
  2. 客户端调用工厂类
      客户端调用工厂类,传入"hp"生产出惠普计算机并调用该计算机对象的start()方法。

    public class CreateComputer{
    public static void main(String[] args){
    ComputerFactory.createComputer("hp").start();
    }
    }

使用简单工厂模式的场景和优缺点

  • 使用场景:
    1. 工厂类负责创建的对象比较少;
    2. 客户只需要知道传入工厂类的参数,而无需关心创建对象的逻辑;
  • 优点:使用户根据参数获得对应的类实例,避免了直接实例化类,降低了耦合性;
  • 缺点:可实例化的类型在编译期间已经被确定。如果增加新类型,则需要修改工厂,这违背了开放封闭原则。简单工厂需要知道所有要生成的类型,当其子类过多或者子类层级过多时不适合使用;

-
-
-
-
-
-
-
-
-
-
-
-
-
-
---------------------last line for now-------------------