简单工厂模式

一、定义

简单工厂模式,又被称为静态工厂方法模式。在简单工厂模式中,可以根据参数的不同,返回不同类的实例。

简单工厂模式

二、模式组成

1、抽象产品

2、具体产品

3、工厂

三、适用的场景

其实由定义也大概能推测出其使用场景,首先由于只有一个工厂类,所以工厂类中创建的对象不能太多,否则工厂类的业务逻辑就太复杂了,其次由于工厂类封装了对象的创建过程,所以客户端应该不关心对象的创建。总结一下适用场景:

(1)需要创建的对象较少。

(2)客户端不关心对象的创建过程。

四、使用步骤

4.1 创建抽象产品类,定义具体产品的公共接口

1 abstract class Product {
2     public abstract void draw();
3 }

4.2 创建具体的产品类

 1 class ProductA extends Product {
 2 
 3     @Override
 4     public void draw() {
 5         System.out.println("生成出了产品A");
 6     }
 7 }
 8 
 9 public class ProdcutB extends Product {
10     @Override
11     public void draw() {
12         System.out.println("生成出了产品B");
13     }
14 }

4.3 创建工厂类

 1 class  Factory {
 2     public static Product Manufacture(String ProductName){
 3         //工厂类里用switch语句控制生产哪种商品;
 4         //使用者只需要调用工厂类的静态方法就可以实现产品类的实例化。
 5         switch (ProductName){
 6             case "A":
 7                 return new ProductA();
 8 
 9             case "B":
10                 return new ProductB();
11 
12             default:
13                 return null;
14 
15         }
16     }
17 }

4.4 外界通过调用工厂类的静态方法,传入不同参数从而创建不同具体产品类的实例

 1 //工厂产品生产流程
 2 public class SimpleFactoryPattern {
 3     public static void main(String[] args) {
 4         Factory mFactory = new Factory();
 5 
 6         //客户要产品A
 7         try {
 8             //调用工厂类的静态方法 & 传入不同参数从而创建产品实例
 9             mFactory.Manufacture("A").Show();
10         } catch (NullPointerException e) {
11             System.out.println("没有这一类产品");
12         }
13 
14         //客户要产品B
15         try {
16             mFactory.Manufacture("B").Show();
17         } catch (NullPointerException e) {
18             System.out.println("没有这一类产品");
19         }
20         
21         //客户要产品D
22         try {
23             mFactory.Manufacture("D").Show();
24         } catch (NullPointerException e) {
25             System.out.println("没有这一类产品");
26         }
27     }
28 }