工厂模式-抽象工厂
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统一的工厂类
2.2 pen工厂和book工厂类
3.测试
![](http://img.blog.csdn.net/20160627172347608)
tips:
简单工厂是处理批量生产产品的设计模式,但是,假如我们有了一个新系列的产品,还是在原有简单工厂里添加,明显违背了单一职责原则。
为了更好的分类管理生产,我们完全可以新开一个工厂,把工厂类给抽象一层(简单工厂,是把产品类抽象一层),按照这个思路,理论上你可
以再在工厂类的上一层再次抽象一层,哈哈,是不是有点狠
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:
简单工厂是处理批量生产产品的设计模式,但是,假如我们有了一个新系列的产品,还是在原有简单工厂里添加,明显违背了单一职责原则。
为了更好的分类管理生产,我们完全可以新开一个工厂,把工厂类给抽象一层(简单工厂,是把产品类抽象一层),按照这个思路,理论上你可
以再在工厂类的上一层再次抽象一层,哈哈,是不是有点狠
相关文章推荐
- RxJava入门一
- POJ 1753 Flip Game
- mysql 删除数据时使用别名
- toArray():将集合转换为数组
- Android开发笔记--关于Android动画
- 【杭电-oj】-2055-An easy problem
- 决策树、逻辑回归、线性回归使用时注意事项以及模型过拟合策略
- 手把手教你使用Git
- Spring MVC File Upload Example Tutorial – Single and Multiple Files
- 服务端入门《五》(gdb 调试)
- 添加一些语言后,切换到该语言手机自动重启,添加ICU资源
- CI框架简单使用方法
- Mysql游标使用
- 【Matplotlib】详解图像各个部分
- Longest Substring Without Repeating Characters Leetcode Python Java
- easyui window弹窗获取x事件
- float属性与clear属性综合讲解与实例
- Appnium+python实现手势密码为什么总是报错
- C#键盘按键对应Keys类大全
- LeetCode—368. Largest Divisible Subset