简单工厂模式
概述
有时我们需要创建一些来自于相同父类的类的实例,为此可以专门定义一个简单工厂类来负责创建这些类的实例,这些被创建的实例具有共同的父类
模式实例
某手机厂专为各手机品牌生产手机,调用工厂的方法时传入参数,则根据传入的不同参数返回不同品牌的手机
在这里手机为父类,各品牌手机则为子类
抽象手机类 Phone
public abstract class Phone {
public abstract void use();
}
具体手机类 HuaweiPhone
public class HuaweiPhone extends Phone {
@Override
public void use() {
System.out.println("华为手机使用中....");
}
}
具体手机类 XiaomiPhone
public class XiaomiPhone extends Phone {
@Override
public void use() {
System.out.println("小米手机使用中....");
}
}
工厂类 PhoneFactory
public class PhoneFactory {
public static Phone producePhone(String brand) {
if(brand.equalsIgnoreCase("huawei")) {
System.out.println("生产华为手机...");
return new HuaweiPhone();
} else if (brand.equalsIgnoreCase("xiaomi")) {
System.out.println("生产小米手机");
return new XiaomiPhone();
} else {
System.out.println("暂无该手机生产....");
return null;
}
}
}
模式优缺点
简单工厂模式优点如下:
- 实现了对责任的分割,客户免除直接创建产品对象的责任,而仅仅消费产品
- 通过引入配置文件,可以在不修改客户端代码的情况下更换和增加新的具体产品类,提高系统灵活性
简单工厂模式缺点如下:
- 工厂类集中了所有产品的创建逻辑,一旦不能正常工作,整个系统都将受到影响
- 系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,不利于系统维护