工厂模式的enum实现
2015-10-19 18:17
429 查看
静态工厂DoorFactory的if-else比较难看、不遵循OCP,但是简洁。俗话说得好,一个简洁三个爱。
工厂模式的enum实现,外表是参数化工厂,内涵工厂方法模式。
接着是参数化工厂方法getObject(String)
public static void testEnum(){
Door d = DoorFactory_Enum.getObject("D1");
d.m();
d = DoorType.valueOf("D2").getObject();
d.m();
}
作业:讨论参数化工厂,工厂方法模式的优缺点。工厂模式的enum实现的优缺点。
链接:Java之enum
public class DoorFactory{ public static Door getObject(String typeName) {//int ID if(typeName.equals("D1")){ return new D1(); }else if(typeName.equals("D2")){ return new D2(); }else{ return null; } } }工厂方法模式避免分支结构的技术,但是工厂和产品成对出现。
public class D1Factory implements Factory{ @Override public Door getObject(){ return new D1(); } }
工厂模式的enum实现,外表是参数化工厂,内涵工厂方法模式。
public enum DoorType{ D1("D1"){ @Override public Door getObject(){ return new D1(); } }, D2("D2"){ @Override public Door getObject(){ return new D2(); } }; private String type; private DoorType( String type ) { this.type = type; } public abstract Door getObject(); }DoorType中定义了工厂方法getObject(),匿名类给出了对应于工厂方法模式中的D1Factory等类型。工厂方法模式中,增加D3Factory不必修改其他代码,而这里就需要添加新的枚举项——减少D1Factory等源文件的代价。
接着是参数化工厂方法getObject(String)
public class DoorFactory_Enum{ private static HashMap<String,DoorType> typeMap = new HashMap<>(); static{ typeMap.put("D1", DoorType.D1); typeMap.put("D2", DoorType.D2); } public static Door getObject(String typeName){ return typeMap.get(typeName).getObject(); } }外界的用法:
public static void testEnum(){
Door d = DoorFactory_Enum.getObject("D1");
d.m();
d = DoorType.valueOf("D2").getObject();
d.m();
}
作业:讨论参数化工厂,工厂方法模式的优缺点。工厂模式的enum实现的优缺点。
链接:Java之enum
相关文章推荐
- 《Spring.3.x企业应用开发实战》--- 零碎笔记
- 匿名方法与Lambda表达式
- 匿名方法与Lambda表达式
- 各语言对浮点数的截取&四舍五入等操作
- JavaScript的Ajax数据请求与浏览器兼容
- SBT安装
- 学习prototypejs中的继承实现机制(二):让$super更像java中的super关键字
- CentOS-6.5系统基础优化附带优化脚本
- 利用HOOK保护记事本进程
- MFC对话框Dialog控件处理程序handler因为public修饰符导致无法访问
- Navicat_Premium连接Oracle_10g
- RocketMQ在windows上安装和开发使用
- 记录一次低级错误――secureCRT无法连接虚拟机
- qt connect 有先后顺序
- appstore防代充的一些想法
- ASP.NET MVC4 WEB API简单应用
- 【C】用C语言提取bmp图片像素,并进行K-means聚类分析——容易遇到的问题
- Oracle 数据泵导数据(expdp,impdp)
- blueZ应用编程
- 安装Android SDK时,点击SDK Manager.exe闪退,并且jdk的环境变量是对的。