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