1.产品类
1.1产品的统一接口
/**
* @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产品
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:
简单工厂是处理批量生产产品的设计模式,但是,假如我们有了一个新系列的产品,还是在原有简单工厂里添加,明显违背了单一职责原则。
为了更好的分类管理生产,我们完全可以新开一个工厂,把工厂类给抽象一层(简单工厂,是把产品类抽象一层),按照这个思路,理论上你可
以再在工厂类的上一层再次抽象一层