工厂模式
简介
定义
- 工厂模式是一种创建类模式,是处理在不指定对象具体类型的情况下创建对象的问题。
- 工厂模式适用于创建复杂对象
- 工厂模式可以定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
使用工厂模式的好处
- 如果想要创建一个对象,只要知道其名称就可以了。
- 工厂模式的扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。
- 工厂模式屏蔽产品的具体实现,调用者只关心产品的接口。
缺点
每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。
实例
通过创建一个手机工厂来获取手机
创建一个接口
首先先创建一个手机接口,手机接口具有call的功能。
//phone.java
public interface Phone {
void call();
}
创建实现接口的实体类
创建具体的手机类,如华为手机类、oppo手机类实现手机接口。
如果想增加一个产品,如小米手机类,只要扩展一个小米手机类就可以。
//HuaweiPhone.java
public class HuaweiPhone implements Phone {
@Override
public void call() {
System.out.println("This is Huawei Phone");
}
}
//OppoPhone.java
public class OppoPhone implements Phone {
@Override
public void call() {
System.out.println("This is Oppo Phone");
}
}
创建一个工厂
通过给定信息的生成基于给定信息的实体类的对象,如给“huawei”则返回一个“HuaweiPhone”对象。
//PhoneFactory.java
public class PhoneFactory {
public Phone getPhone(String phoneType){
if(phoneType==null){
return null;
}
if (phoneType.equalsIgnoreCase("huawei")){
return new HuaweiPhone();
}else if (phoneType.equalsIgnoreCase("oppo")){
return new OppoPhone();
}
return null;
}
}
使用该工厂
具体使用工厂是通过传递类型信息来获取实体类的对象,如“Huawei”,“oppo”手机类型信息。
//PhoneDemo.java
public class PhoneDemo {
public static void main(String[] args) {
PhoneFactory phoneFactory =new PhoneFactory();
Phone phone1 = phoneFactory.getPhone("huawei");
Phone phone2 = phoneFactory.getPhone("oppo");
phone1.call();
phone2.call();
}
}
运行结果
总结
使用工厂模式要结合实际情况,工厂模式适用于创建复杂对象。
如果创建简单对象使用工厂模式可能增加系统复杂度,特别是只需要通过 new 就可以完成创建的对象,无需使用工厂模式。
关注博主,一起来学习设计模式吧