工厂方法模式
概述
工厂方法模式是简单工厂模式的延伸,在工厂方法模式中,工厂父类负责定义产品对象的公共接口,而子工厂模式负责生成具体的产品对象
模式实例
之前的简单工厂统一生产所有品牌的手机,这次为每种品牌的手机提供一个子工厂,使具有更好的灵活性和可扩展性
抽象产品类 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 interface PhoneFactory {
Phone producePhone();
}
具体工厂类 HuaweiPFactory
public class HuaweiPFactory implements PhoneFactory {
@Override
public Phone producePhone() {
System.out.println("华为工厂生产华为手机......");
return new HuaweiPhone();
}
}
具体工厂类 XiaomiPFactory
public class XiaomiPFactory implements PhoneFactory {
@Override
public Phone producePhone() {
System.out.println("小米工厂生产小米手机......");
return new XiaomiPhone();
}
}
模式优缺点
工厂方法模式优点:
- 向系统加入新产品时,无须修改抽象工厂和抽象产品提供的接口,也无须修改其他具体工厂和产品,只要添加一个具体工厂和具体产品即可
工厂方法模式缺点:
- 添加新产品时,需要提供新的具体产品类和对应的具体工厂类,类的个数会成对增加,增加系统复杂性