源无极

导航

 

1. 含义

简单工厂模式又叫静态方法模式(因为工厂类定义了一个静态方法)

现实生活中,工厂是负责生产产品的;同样在设计模式中,简单工厂模式我们可以理解为负责生产对象的一个类,称为“工厂类”。

 

2. 解决的问题

  • 将“类实例化的操作”与“使用对象的操作”分开,让使用者不用知道具体参数就可以实例化出所需要的“产品”类,从而避免了在客户端代码中显式指定,实现了解耦。

3.UML类图

 

实例

  • 背景:小成有一个塑料生产厂,用来做塑料加工生意
  • 目的:最近推出了3个产品,小成希望使用简单工厂模式实现3款产品的生产

实现代码如下:

步骤1. 创建抽象产品类,定义具体产品的公共接口

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

 

步骤2. 创建具体产品类(继承抽象产品类),定义生产的具体产品

1 //具体产品类A
2 class  ProductA extends  Product{
3 
4     @Override
5     public void Show() {
6         System.out.println("生产出了产品A");
7     }
8 }

 

1 //具体产品类B
2 class  ProductB extends  Product{
3 
4     @Override
5     public void Show() {
6         System.out.println("生产出了产品C");
7     }
8 }

 

1 //具体产品类C
2 class  ProductC extends  Product{
3 
4     @Override
5     public void Show() {
6         System.out.println("生产出了产品C");
7     }
8 }

 

步骤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             case "C":
13                 return new ProductC();
14 
15             default:
16                 return null;
17 
18         }
19     }
20 }

 

步骤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         //客户要产品C
22         try {
23             mFactory.Manufacture("C").Show();
24         }catch (NullPointerException e){
25             System.out.println("没有这一类产品");
26         }
27 
28         //客户要产品D
29         try {
30             mFactory.Manufacture("D").Show();
31         }catch (NullPointerException e){
32             System.out.println("没有这一类产品");
33         }
34     }
35 }

 

结果输出:

生产出了产品A
生产出了产品C
生产出了产品C
没有这一类产品


链接:https://www.jianshu.com/p/e55fbddc071c

posted on 2018-12-13 22:01  源无极  阅读(81)  评论(0编辑  收藏  举报