最近这几天把之前学到的设计模式写个总结,现在先写个简单工厂模式
先看下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"); } }
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的代码,这与面向对象的开闭原则(对扩展开放,对修改关闭)相矛盾。所以,就会出现了工厂模式。
工厂模式下次再讲。
原文:http://blog.csdn.net/hwb1992/article/details/22697963