设计模式——工厂方法模式
原创
©著作权归作者所有:来自51CTO博客作者是丹凤呀的原创作品,请联系作者获取转载授权,否则将追究法律责任
定义
定义一个创建对象的接口,但实现让这个接口的类来决定具体实例化哪个类,工厂方法让类的实例化推迟到子类中进行
类型:创建型
使用场景
(1)创建对象需要大量重复的代码
(2)客户端不依赖于产品类实例如何创建、实现等细节
(3)一个类通过其子类来指定创建哪个对象
优缺点
优点:
用户只需要关心所需产品对应的工厂,无需关心创建细节
加入新产品符合开闭原则,提高可扩展性
缺点:
类的个数容易过多,增加复杂度
增加了系统的抽象性和理解难度
Demo
这里结合简单工厂模式继续改造一下
将FruitFactory修改为抽象类,具体水果类的创建延迟到它的子类中
public abstract class FruitFactory {
public abstract Fruit getFruit();
}
添加新的工厂类,实现子类
public class AppleFactory extends FruitFactory {
@Override
public Fruit getFruit() {
return new Apple();
}
}
public class BananaFactory extends FruitFactory {
@Override
public Fruit getFruit() {
return new Banana();
}
}
最后测试类
public class Test {
public static void main(String[] args) {
FruitFactory appleFactory = new AppleFactory();
Fruit fruit = appleFactory.getFruit();
fruit.name();
}
}
工厂方法解决的是产品族的问题,上面不同的水果Apple Banana都属于同一个产品等级——水果,而某种水果的名字 价格属于同一产品族,这便是工厂方法要解决的。