咖啡案例:
1. 简单工厂模式(不属于GOF的23种设计模式):
简单工厂模式不是设计模式,反而更像是编程习惯
抽象产品:定义了产品规范,描述了产品的主要特性和功能,比如咖啡类
具体产品:实现或者基础抽象产品的子类,比如拿铁类
具体工厂:提供了创建产品的方法,调用者通过该方法来创建产品
优缺点:
优点:封装了创建对象的过程,可以通过参数直接获取对象,把对象的创建和业务逻辑层分开,这样以后就避免了修改客户代码,如果实现新产品直接修改工厂类降低了客户代码修改的可能性
缺点:
增加新产品时还需要修改工厂类的代码,违背了“开闭原则”
静态工厂:
2.工厂方法模式:
定义了一个用于创建对象的接口,让子类决定实例化哪个产品类对象,工厂方法使一个产品类的实例化延迟到其工厂的子类。
优缺点:
优点:用户只要知道具体工厂的名称就可得到所需的产品,无须知道具体产品创建过程
在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任何修改,满足开闭原则
缺点:
没增加一个产品就要增加一个具体产品类和对应的具体工厂类,者增加系统的复杂度
3.抽象工厂模式:
前面介绍的工厂方法模式中考虑的是一类产品的生产,如畜牧场只养动物,电视机厂只生产电视机。
这些工厂只生产同种类产品,同种类产品称为同等级产品。也就是说:工厂方法模式只考虑生产同等级的产品,但是在现实生活中许多工厂是综合型的工厂,能生产多等级的产品。
抽象工厂模式将考虑多等级产品的生产,将同一具体工厂所生产的位于不同等级的一组产品成为一个产品。
优缺点:
jdk举例:
Collection.iterator
工厂方法方法: