一、定义
简单工厂模式,又被称为静态工厂方法模式。在简单工厂模式中,可以根据参数的不同,返回不同类的实例。
二、模式组成
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 }