工厂模式-抽象工厂

来源:互联网 发布:淘宝店铺导航代码大全 编辑:程序博客网 时间:2024/05/16 20:39

1.产品类

1.1产品的统一接口

[java] view plain copy
  1. /** 
  2.  * @Desc:产品的接口 
  3.  * @author zy 
  4.  * @date 2016年6月21日下午4:40:33 
  5.  */  
  6. public interface Product {  
  7.       
  8.     /** 
  9.      * @Desc:获取具体的产品 
  10.      * @author:zy 
  11.      * @version: 2016年6月21日 下午5:00:37 
  12.      */  
  13.     public void getDetailProduct();  
  14.       
  15. }  
1.2 A产品和B产品

[java] view plain copy
  1. public class A implements Product{  
  2.   
  3.     @Override  
  4.     public void getDetailProduct() {  
  5.         System.out.println("get a product");  
  6.           
  7.     }  
  8.   
  9. }  
  10.   
  11.   
  12.   
  13. public class B implements Product{  
  14.   
  15.     @Override  
  16.     public void getDetailProduct() {  
  17.         System.out.println("get b product");  
  18.           
  19.     }  
  20.       
  21. }  

2.工厂类

2.1统一的工厂类

/** * @Desc:获取产品的统一接口 * @author zy * @date 2016年6月21日下午4:32:15 */public interface Factory {/** * @Desc:获取具体的产品 大件 * @return: * @author:zy * @version: 2016年6月21日 下午4:29:18 */    public Product getBigProduct();        /**     * @Desc:获取具体的产品 小件     * @return:     * @author:zy     * @version: 2016年6月22日 下午2:25:11     */    public Product getSmallProduct();}

2.2 pen工厂和book工厂类

/** * @Desc:生产本子的工厂类 * @author zy * @date 2016年6月21日下午4:36:42 */public class BookFctory implements Factory{    @Overridepublic Product getBigProduct() {return new BigBook();}@Overridepublic Product getSmallProduct() {return new SmallBook();}}/** * @Desc:大号本子 * @author zy * @date 2016年6月21日下午4:38:52 */class BigBook implements Product{@Overridepublic void getDetailProduct() {System.out.println("我是大号笔记本");}}/** * @Desc:小号本子 * @author zy * @date 2016年6月21日下午4:38:59 */class SmallBook implements Product{@Overridepublic void getDetailProduct() {System.out.println("我是小号笔记本");}}

/** * @Desc:生产笔的工厂类 * @author zy * @date 2016年6月21日下午4:36:21 */public class PenFactory implements Factory{@Overridepublic Product getBigProduct() {return new BigPen();}@Overridepublic Product getSmallProduct() {return new SmallPen();}}class BigPen implements Product{@Overridepublic void getDetailProduct() {System.out.println("我是大号笔");}}class SmallPen implements Product{@Overridepublic void getDetailProduct() {System.out.println("我是小号笔");}}

3.测试

/** * @Desc: *   需求描述:假如M是一家公司,初创阶段,只有生产book的工厂,经过良好的运营,要增加产业链-笔工厂。 *         如果我们还是按照静态工厂,我们就得在simpleFactoryStaic中修改代码,显然,这样是很不友好的(违背开闭原则)。 *   解决思路:我们可以把工厂类抽象出来,(和product一样)这样我们增加一个工厂,只需要增加一个.java的文件即可 * @author zy * @date 2016年6月22日下午2:30:27 */public class M {    public static void main(String[] args) {        Factory bookFactory = new BookFctory();        Product bookProduct = bookFactory.getBigProduct();                bookProduct.getDetailProduct();    }}




tips:

  简单工厂是处理批量生产产品的设计模式,但是,假如我们有了一个新系列的产品,还是在原有简单工厂里添加,明显违背了单一职责原则。

为了更好的分类管理生产,我们完全可以新开一个工厂,把工厂类给抽象一层(简单工厂,是把产品类抽象一层),按照这个思路,理论上你可

以再在工厂类的上一层再次抽象一层,哈哈,是不是有点狠


1 0
原创粉丝点击