工厂模式 (Factory Method)
工厂模式主要用于解决以下问题:
- 如何创建一个对象,让子对象自选用于实例化?
- 如何让一个类的实例化推迟到子类?
解决方案
- 定义一个独立 operation (factory method) 用于创建对象
- 调用factory method 来创建对象
使用场景
- 日志记录器:记录到本地硬盘或远程服务器,用户可以选择记录日志地点
- 数据库访问,用户不知道最后用哪个数据库,以及数据库有变化时
- 设计一个连接服务器的框架,需要三个协议pop imap http,可以把此三类产品共同实现一个接口
总的来说,一个可能需要扩展或修改的类群/产品,我们可以使用工厂模式来封装这类群的创建方法,
这样用户主需要通过这个工厂接口就可以调用类群中任意一个类的方法。
缺点:
每次增加一类产品时,都需要一个具体类与对象实现工厂,系统复杂度成倍增加。
代码实现
场景:比如一个手机厂要造2种手机,一种android,一种ios
逻辑类图
/*
* A phone factory that creates Android phones and Ios phones
*/
class PhoneFactory{
public Phone getPhone(String phoneType){
if (phoneType == null){
return null;
}
if (phoneType.equalsIgnoreCase("ANDROID")){
return new AndroidPhone();
}
else if (phoneType.equalsIgnoreCase("IOS")){
return new IosPhone();
}
return null;
}
//users use PhoneFactory to create phones so as to use phone;
public static void main(String[] args){
PhoneFactory demo = new PhoneFactory();
Phone phone = demo.getPhone("Ios");
phone.usePhone();
}
}
interface Phone{
void usePhone();
}
class AndroidPhone implements Phone{
public void usePhone(){
System.out.println("this is an Android Phone");
}
}
class IosPhone implements Phone{
public void usePhone(){
System.out.println("this is an IosPhone");
}
}
运行结果:
this is an IosPhone