设计模式之二 简单工厂
2014-03-31 22:58
351 查看
最近这几天把之前学到的设计模式写个总结,现在先写个简单工厂模式
先看下UML图吧
从UML图中我们可以看出,PhoneFactory调用getPhone方法去产生对应的Phone对象
然我们看看代码吧
然后看看具体的IPhone实现
之后是XiaoMi的
最后就是简单工厂的实现了
结果:
总结:
简单工厂,顾名思义就是简单,但是它不易扩展,如果要增加新的Phone类型,那么就要修改原有的PhoneFactory的代码,这与面向对象的开闭原则(对扩展开放,对修改关闭)相矛盾。所以,就会出现了工厂模式。
工厂模式下次再讲。
先看下UML图吧
从UML图中我们可以看出,PhoneFactory调用getPhone方法去产生对应的Phone对象
然我们看看代码吧
package edu.fjnu.cs.hwb.esayfactory; //定义个Phone接口 public interface Phone { void call(); }
然后看看具体的IPhone实现
package edu.fjnu.cs.hwb.esayfactory; public class IPhone implements Phone { @Override public void call() { // TODO Auto-generated method stub System.out.println("my phone type is IPhone"); } }
之后是XiaoMi的
package edu.fjnu.cs.hwb.esayfactory; public class XiaoMi implements Phone { @Override public void call() { // TODO Auto-generated method stub System.out.println("my phone type is XiaoMi"); } }
最后就是简单工厂的实现了
package edu.fjnu.cs.hwb.esayfactory; public class PhoneFactory { public static Phone getPhone(String type) { Phone phone = null; if(type.equalsIgnoreCase("IPhone")) { phone = new IPhone(); } else if(type.equalsIgnoreCase("XiaoMi")) { phone = new XiaoMi(); } return phone; } }看下客户端程序员怎么使用这个工厂
package edu.fjnu.cs.hwb.esayfactory; public class Client { public static void main(String[ ] args) { Phone phone = PhoneFactory.getPhone("iphone"); phone.call(); phone = PhoneFactory.getPhone("xiaomi"); phone.call(); } }
结果:
总结:
简单工厂,顾名思义就是简单,但是它不易扩展,如果要增加新的Phone类型,那么就要修改原有的PhoneFactory的代码,这与面向对象的开闭原则(对扩展开放,对修改关闭)相矛盾。所以,就会出现了工厂模式。
工厂模式下次再讲。
相关文章推荐
- [Codeforces Round #195 (Div. 2)] A. Vasily the Bear and Triangle
- 状态图 Statechart Diagram
- 深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP
- 3.去除字符串中重复字符,保证每个字符只出现一次
- 算法 数组中的最长递增子序列
- 算法 (连续)子数组的最大和(及起始点)
- 冒泡排序算法
- 1005
- ios何时使用self.
- Loadrunner 参数化使用mysql数据源
- mpc5125 开发板 基于 核心板
- oracle数据库中由于没有做任何约束,如何删掉表中重复的记录 推荐
- Linux 3.14 kernel发布
- eclipse中JS报错的问题
- Java欢迎你
- 解决win7开机出现\Boot\BCD错误
- Tomcat虚拟主机配置示例
- Java笔记深解---return 、 final
- ViewPager和TabHost结合学习心得
- Reward