设计模式---抽象工场模式
2016-06-10 14:17
375 查看
抽象工场相对于简单工场模式又更进一步,简单工场每个工场与具体的产品绑定,而抽象工场则是为了产生产品系列组合。
它的好处是可以很方便的扩展产品系列,但是单个扩展新的产品不是很方便
这里我们先来定义二种产品Food和它的实现类,Shape和它的实现类如下
package com.zcj.abstractpattern;
public abstract class Food {
public abstract void print();
}
package com.zcj.abstractpattern;
public interface Shape {
public void print();
}
package com.zcj.abstractpattern;
public interface AbstractFactory {
public Food createFood();
public Shape createShape();
}
package com.zcj.abstractpattern;
public class AbstractFactoryTest {
public static void main(String[] args) {
//AbstractFactory aFactory = new Type1Factory();
AbstractFactory aFactory = new Type2Factory();
Food food = aFactory.createFood();
Shape shape= aFactory.createShape();
food.print();
shape.print();
}
}
它的好处是可以很方便的扩展产品系列,但是单个扩展新的产品不是很方便
这里我们先来定义二种产品Food和它的实现类,Shape和它的实现类如下
package com.zcj.abstractpattern;
public abstract class Food {
public abstract void print();
}
package com.zcj.abstractpattern; public class Rice extends Food { @Override public void print() { System.out.println("i am rice"); } }
package com.zcj.abstractpattern; public class Apple extends Food{ @Override public void print() { System.out.println("i am apple"); } }Shape:
package com.zcj.abstractpattern;
public interface Shape {
public void print();
}
package com.zcj.abstractpattern; public class Rectangle implements Shape { @Override public void print() { System.out.println("rectangle..."); } }
package com.zcj.abstractpattern; public class Triangle implements Shape { @Override public void print() { System.out.println("Triangle..."); } }抽象工场的定义和它的二个系列的产品实现:
package com.zcj.abstractpattern;
public interface AbstractFactory {
public Food createFood();
public Shape createShape();
}
package com.zcj.abstractpattern; public class Type1Factory implements AbstractFactory { @Override public Food createFood() { return new Rice(); } @Override public Shape createShape() { return new Rectangle(); } }
package com.zcj.abstractpattern; public class Type2Factory implements AbstractFactory { @Override public Food createFood() { return new Apple(); } @Override public Shape createShape() { return new Triangle(); } }最终我们的测试程序:
package com.zcj.abstractpattern;
public class AbstractFactoryTest {
public static void main(String[] args) {
//AbstractFactory aFactory = new Type1Factory();
AbstractFactory aFactory = new Type2Factory();
Food food = aFactory.createFood();
Shape shape= aFactory.createShape();
food.print();
shape.print();
}
}
相关文章推荐
- IOS上的socket通信
- 号码归属地查询&设置中心(自定义组合控件)&震动器 &监听输入EditText(输入监听器TextWatcher)
- JStorm-2.1.1源码分析--Topology提交(下)
- 论Linux非图形界面下如何上传文件到百度云盘
- 染色问题 快速幂 递推
- Xamarin.Forms支付组件PayPal.Forms - 怎样引用原生Android、iOS包
- 转义字符中不常见的两种用法
- dl带描述的标题列表
- 我的Unity3D学习日记-03(Input,GameObject,Vector3)
- 农村土地确权之系列文档 —— 关于数据接边工作安排的说明
- 高精度算法
- 陶哲轩实分析 4.4 节习题试解
- Java多线程基础知识疑难点
- 陶哲轩实分析 4.4 节习题试解
- 鼓捣RxAndroid--介绍 学习响应式编程的简单方法
- 通过sqli-labs学习sql注入——进阶挑战之less23-28a
- git 工具
- 收集的一些常用java正则表达式
- 理解 position:relative 与 position:absolute
- JavaScript BOM的属性及方法