抽象工厂模式
2016-09-04 20:34
225 查看
定义
起源与以前对不同操作系统的图形化解决方案,如不同操作系统的按钮和文本框控件其实现不同,展示效果也不一样,对于每一个操作系统,其本身就构成一个产品类,而按钮与文本框控件也构成一个类,两种产品类两种变化,各自有自己的特性。
魏传建一组相关或者是互相依赖的对象提供统一接口,而不需要指定它们的具体类。
使用场景
Android、iOS、Windows Phone下都有短信软件和拨号软件,两者都属于Software范畴,但是,他们所在的操作系统平台不一样,即便是同一家公司出品的软件,其代码的实现逻辑也是不同的。
UML图:
代码
CarFactory.java
ITire.java
NormalTire
IEngine.java
ImportEngine.java
DomesticEngine.java
IBrake.java
SeniorBrake.java
Q3Factory.java
Q7Factory.java
SUVTire.java
Client.java
运行结果:
起源与以前对不同操作系统的图形化解决方案,如不同操作系统的按钮和文本框控件其实现不同,展示效果也不一样,对于每一个操作系统,其本身就构成一个产品类,而按钮与文本框控件也构成一个类,两种产品类两种变化,各自有自己的特性。
魏传建一组相关或者是互相依赖的对象提供统一接口,而不需要指定它们的具体类。
使用场景
Android、iOS、Windows Phone下都有短信软件和拨号软件,两者都属于Software范畴,但是,他们所在的操作系统平台不一样,即便是同一家公司出品的软件,其代码的实现逻辑也是不同的。
UML图:
代码
CarFactory.java
public abstract class CarFactory { public abstract ITire createTire(); public abstract IEngine createEngine(); public abstract IBrake createBrake(); }
ITire.java
public interface ITire { void tire(); }
NormalTire
public class NormalTire implements ITire { @Override public void tire(){ System.out.println("普通轮胎"); } }
IEngine.java
public interface IEngine { void engine(); }
ImportEngine.java
public class ImportEngine implements IEngine { @Override public void engine(){ System.out.println("进口发动机"); } }
DomesticEngine.java
public class DomesticEngine implements IEngine { @Override public void engine(){ System.out.println("国产发动机"); } }
IBrake.java
public interface IBrake { void brake(); }
SeniorBrake.java
public class SeniorBrake implements IBrake { @Override public void brake(){ System.out.println("高级制动"); } }
Q3Factory.java
public class Q3Factory extends CarFactory { @Override public ITire createTire(){ return new NormalTire(); } @Override public IEngine createEngine(){ return new DomesticEngine(); } @Override public IBrake createBrake(){ return new NormalBrake(); } }
Q7Factory.java
public class Q7Factory extends CarFactory{ @Override public ITire createTire(){ return new SUVTire(); } @Override public IEngine createEngine(){ return new ImportEngine(); } @Override public IBrake createBrake(){ return new SeniorBrake(); } }
SUVTire.java
public class SUVTire implements ITire { @Override public void tire(){ System.out.println("越野轮胎"); } }
Client.java
public class Client { public static void main(String[] args){ CarFactory factoryQ3=new Q3Factory(); factoryQ3.createTire().tire(); factoryQ3.createEngine().engine(); factoryQ3.createBrake().brake(); System.out.println("-----------------------"); CarFactory factoryQ7=new Q7Factory(); factoryQ7.createTire().tire(); factoryQ7.createEngine().engine(); factoryQ7.createBrake().brake(); } }
运行结果:
相关文章推荐
- 统计文件中数据出现的次数并排序
- 机房收费系统(四)-上下机总结
- py-faster-rcnn源码解读系列(五)——stage1_rpn_train.pt
- 九度题目1481:Is It A Tree?
- Java - 华为机试训练 - 密码验证合格程序(正则表达式判断)
- 九度题目1481:Is It A Tree?
- css盒模型
- 筛选法找素数算法的一点改进
- rsync 使用示例
- pip安装lxml时报错
- Android并发-Future,FutureTask和Callable及AsyncTask
- mvc从分析到实例,实例到总结
- 于堆栈的(Stack-based ) 和基于寄存器(Register-based) 的虚拟机区别
- CF #368 D Persistent Bookcase 操作树~?
- Find the Difference —— leetcode
- 寻找徐峥小游戏
- 面试题-多线程编程
- 无密码通过ssh执行rsync
- Android的缓存技术:LruCache和DiskLruCache
- Android进程保活