您的位置:首页 > 其它

工厂模式-抽象工厂

2016-06-27 17:23 253 查看
1.产品类

1.1产品的统一接口

[java] view
plain copy

/** 

 * @Desc:产品的接口 

 * @author zy 

 * @date 2016年6月21日下午4:40:33 

 */  

public interface Product {  

      

    /** 

     * @Desc:获取具体的产品 

     * @author:zy 

     * @version: 2016年6月21日 下午5:00:37 

     */  

    public void getDetailProduct();  

      

}  

1.2 A产品和B产品

[java] view
plain copy

public class A implements Product{  

  

    @Override  

    public void getDetailProduct() {  

        System.out.println("get a product");  

          

    }  

  

}  

  

  

  

public class B implements Product{  

  

    @Override  

    public void getDetailProduct() {  

        System.out.println("get b product");  

          

    }  

      

}  

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{

@Override
public Product getBigProduct() {
return new BigBook();
}

@Override
public Product getSmallProduct() {
return new SmallBook();
}
}

/**
* @Desc:大号本子
* @author zy
* @date 2016年6月21日下午4:38:52
*/
class BigBook implements Product{

@Override
public void getDetailProduct() {
System.out.println("我是大号笔记本");
}

}

/**
* @Desc:小号本子
* @author zy
* @date 2016年6月21日下午4:38:59
*/
class SmallBook implements Product{

@Override
public void getDetailProduct() {
System.out.println("我是小号笔记本");
}

}

/**
* @Desc:生产笔的工厂类
* @author zy
* @date 2016年6月21日下午4:36:21
*/
public class PenFactory implements Factory{

@Override
public Product getBigProduct() {

return new BigPen();
}

@Override
public Product getSmallProduct() {
return new SmallPen();
}
}

class BigPen implements Product{

@Override
public void getDetailProduct() {
System.out.println("我是大号笔");
}

}

class SmallPen implements Product{

@Override
public 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:

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

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

以再在工厂类的上一层再次抽象一层,哈哈,是不是有点狠
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: