Design Pattern -- 工厂模式

引言:工厂用于帮你完成对象的new操作,作用一般是:帮你创建对象。一般配合反射来使用。

一、场景


A卖果汁和雪糕,B也卖果汁和雪糕,但是A有自己的店铺和制作机器,也可以引进各种产品的制作图谱,让机器去生产就好;而B是纯手工自己弄,那么,很明显,A一天能卖出去的东西肯定更多,B效率这么低,就算我们愿意排队等,B一天也卖不了多少。于是B想要引进A的经营方式,引进机器。

二、设计与代码

  1. 首先,B定义好自己想要从事的活。【要生产什么】
    public abstract class Product {
     public abstract void msg();
    }
    
  2. 然后,得买一个什么都能学会的机子,给他什么图谱,他就能生产什么。
    好,找到卖机器的店,看到机器的模型。
    public abstract class Factory {
     public abstract <T extends Product> T createProduct(Class<T> clazz);
    }
    
    好,最终找到适合自己的生产机器。【终极版本,直接反射来学习各种图谱】
    public class ConcreteFactory extends Factory{
     @Override
     public <T extends Product> T createProduct(Class<T> clazz) {
         Product product = null;
         try {
             product = (Product) Class.forName(clazz.getName()).newInstance();
         } catch (InstantiationException | IllegalAccessException
                 | ClassNotFoundException e) {
             e.printStackTrace();
         }
         return (T) product;
     }
    }
    
  3. 好了,万事具备,现在,B想生产果汁(ProductA) 和 雪糕(ProductB),只需要这样:
public class IceCream extends Product{
    @Override
    public void msg() {
        System.out.println("我是雪糕");
    }
}
public class Juice extends Product {
    @Override
    public void msg() {
        System.out.println("我是果汁");
    }
}
  1. 结果


推荐阅读更多精彩内容