抽象工厂
2015-12-08 19:03
411 查看
工厂方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题。
首先完全实现‘开-闭 原则’,实现了可扩展。其次更复杂的层次结构,可以应用于产品结果复杂的场合。
工厂方法模式的对简单工厂模式进行了抽象。有一个抽象的Factory类(可以是抽象类和接口),这个类将不在负责具体的产品生产,而是只制定一些规范,具体的生产工作由其子类去完成。在这个模式中,工厂类和产品类往往可以依次对应。即一个抽象工厂对应一个抽象产品,一个具体工厂对应一个具体产品,这个具体的工厂就负责生产对应的产品。
具体:实体工厂实现抽象工厂,实体产品实现抽象产品;抽象工厂生产抽象产品,实体工厂生产实体产品;实体工厂A生产实体产品A,实体工厂B生产实体产品B。
实例代码:
首先完全实现‘开-闭 原则’,实现了可扩展。其次更复杂的层次结构,可以应用于产品结果复杂的场合。
工厂方法模式的对简单工厂模式进行了抽象。有一个抽象的Factory类(可以是抽象类和接口),这个类将不在负责具体的产品生产,而是只制定一些规范,具体的生产工作由其子类去完成。在这个模式中,工厂类和产品类往往可以依次对应。即一个抽象工厂对应一个抽象产品,一个具体工厂对应一个具体产品,这个具体的工厂就负责生产对应的产品。
具体:实体工厂实现抽象工厂,实体产品实现抽象产品;抽象工厂生产抽象产品,实体工厂生产实体产品;实体工厂A生产实体产品A,实体工厂B生产实体产品B。
实例代码:
package com.heng; public interface InterfaceFactory { public InterfacePhone creatPhone(); }
package com.heng; public class AndroidFactory implements InterfaceFactory{ public InterfacePhone creatPhone() { return new AndroidPhone(); } }
package com.heng; public class AppleFactory implements InterfaceFactory{ public InterfacePhone creatPhone() { return new ApplePhone(); } }
package com.heng; public interface InterfacePhone { public void name(); }
package com.heng; public class AndroidPhone implements InterfacePhone{ public void name() { System.out.println("我是Android手机"); } }
package com.heng; public class ApplePhone implements InterfacePhone{ public void name() { System.out.println("我是苹果手机"); } }
package com.heng; public class Test { public static void main(String[] args) { //生产一个Android手机 InterfaceFactory androidFactory = new AndroidFactory(); InterfacePhone androidPhone = androidFactory.creatPhone(); androidPhone.name(); //生产一个苹果手机 InterfaceFactory appleFactory = new AppleFactory(); InterfacePhone applePhone = appleFactory.creatPhone(); applePhone.name(); } }
相关文章推荐
- python PIL 处理图片的模快 Image类
- 转载:tomcat过程原理
- iOS 【原生API 缓存类NSCache】
- Spring的核心技术(六)---基于Setter的依赖注入
- sql 存储过程 分页
- spring 动态定时任务
- 基于Wolf32F031 自由评估板的IIC EEPROM实验硬件原理及软件API使用方法(适用于STM32F030/031)
- Java&Xml教程(二)使用DOM方式解析XML文件
- Java&Xml教程(二)使用DOM方式解析XML文件
- Java&Xml教程(二)使用DOM方式解析XML文件
- guava处理字符串与List之间,字符串与map之间的转换<转>
- UITextView 如何使显示不全的单词不折行显示
- android adb 卸载内置系统apk方法
- Android 操作SQLite基本用法
- C#读取摄像头并对图像做简单处理--AVICap32篇
- Fiddler进行模拟Post提交json数据,总为null解决方式
- Initial job has not accepted any resources; check your cluster UI to ensure that workers are registe
- 15个值得开发人员关注的jQuery开发技巧和心得
- VC自动加载动态库的一点想法
- 创业公社:亦庄分中心开业 借好创业东风