工厂方法模式

工厂方法

实现描述

个人见解,相对于简单工厂,工厂方法的区别在于:
简单工厂只是抽象了产品,而由统一的工厂生产,而工厂方法将工厂也进行了抽象,增加了工厂的可扩展性。

模式介绍

在简单工厂中,创建对象的是一个工厂类,而在工厂方法中,是由子类来创建对象。

应用场景

假设小明的蛋糕店扩展了业务,现在还会卖饼干、面包,此时如果改造之前的面包店就会比较费劲,于是小明打算新开两个分店,一个店生产饼干、一个店生产面包。

抽象产品
public abstract class Product {
    public abstract String info();
}
具体产品
public class Cake extends Product {
    public String info() { return "蛋糕"; }
}
public class Bread extends Product {
    public String info() { return "面包"; }
}
public class Cookie extends Product {
    public String info() { return "饼干"; }
}
抽象工厂
public abstract class Factory {
    public abstract Product Manufacture();
}
具体工厂
public class CakeStore extends Factory {
    public Product Manufacture() { return new Cake(); }
}
public class BreadStore extends Factory {
    public Product Manufacture() { return new Bread(); }
}
public class CookieStore extends Factory {
    public Product Manufacture() { return new Cookie(); }
}
调用类
public class User {
    public static void main(String[] args) {
        Factory storeA = new BreadStore();
        Product productA = storeA.Manufacture();
        System.out.println("顾客购买了" + productA.info());
        Factory storeB = new CookieStore();
        Product productB = storeB.Manufacture();
        System.out.println("顾客购买了" + productB.info());
    }
}

总结

  • 工厂方法符合单一职责原则 ,每个具体工厂类只负责创建对应的产品
  • 新增一种产品时,只需要增加相应的产品类和子类工厂,而简单工厂模式需要修改工厂类的判断逻辑
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值