设计模式之工厂模式
基本概念
工厂模式也是一种生产对象型的设计模式。
有了工厂模式后,当需要某个类的对象时,就不再需要去new指定的类,而是调用工厂中的方法即可。
实现
假设存在某个类Phone:
public class MiPhone {
}
普通的使用:
MiPhone p = new MiPhone();
p.xx = xx;
但是,出于某些原因,也许不希望在使用时调用构造方法来创建对象,则专门创建一个生产对象的工厂类,并且由这个类中的某个方法来创建对象:
public class PhoneFactory {
public static Phone newInstance() {
MiPhone p = new MiPhone();
p.xx = xx;
return p;
}
}
则:
MiPhone phone = PhoneFactory.newInstance();
在以上实现效果中,当需要Phone类的对象时,直接调用工厂中的方法即可,也就不需要关心对象的创建过程!
甚至,有的时候,也许你需要的对象只要是某种大分类的类型的就可以,而不必是某个指定的类型:
public interface Phone {
void dial();
void call();
}
public class MiPhone implements Phone {
}
一旦存在这样的实现关系后,如果需要的对象能做到是接口中已经定义方法,则:
Phone phone = PhoneFactory.newInstance();
phone.dial();
phone.call();
或者,当MiPhone类已经不足以满足你的需求时,还可以:
public class HuaWeiPhone implements Phone {
}
然后:
public class PhoneFactory {
public static Phone newInstance() {
HuaWeiPhone p = new HuaWeiPhone();
return p;
}
}
然而,经过这些调整,原有具体执行的代码却不需要改变!即:
Phone phone = PhoneFactory.newInstance();
phone.dial();
phone.call();
以上代码是不需要调整的!所以,工厂模式还有一个特点就是:你可能不会过度的依赖于某个MiPhone或者HuaWeiPhone这样的类,这些类都是可以易于被替换的!以提高了整个项目的可维护性!
另外提一点,这些类可以放在同一个包中:
cn.tedu.factory_demo.Phone
cn.tedu.factory_demo.MiPhone
cn.tedu.factory_demo.HuaWeiPhone
cn.tedu.factory_demo.PhoneFactory
然后,具体使用的类,例如MiPhone或者HuaWeiPhone的类本身可以使用默认的权限修饰符,例如:
class MiPhone implements Phone {
}
浙公网安备 33010602011771号