Java设计模式(工厂方法模式)

工厂方法模式是一种设计模式,通过定义工厂接口并由子类实现,实现了创建对象的抽象,使得增加新产品时无需修改原有代码,符合开闭原则。它解决了简单工厂模式的扩展性问题,但当需要创建新产品时,需增加新的工厂类。此模式保持了类的封装,并引入了多态性,使得系统更加灵活。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工厂方法模式,也称为工厂模式、多态工厂模式和虚拟构造器模式,通过定义工厂父类负责定义创建对象的公共接口,而子类则负责生成具体的对象。

简单工厂违背开闭原则,当新增一种产品时,就需要去变更工厂类。

主要是将类的实例化延迟到工厂类的子类中完成,即由子类来决定应该实例化哪个类,工厂类不再负责产品的创建,而是由具体工厂实现接口,这样当新增产品时就无需修改工厂类逻辑,而是添加新的工厂类,符合开闭原则,解决了简单工厂的缺点。

创建抽象工厂类

    abstract class TeaFactory{
     public abstract Tea getTea();
    }

创建抽象产品

    abstract class Tea{
     abstract void drink();
     abstract void drinkAfter();
    }

创建具体产品类

    class GreenTea extends Tea{
     public GreenTea(){
         System.out.print("正在制作");
     }
     public void drink(){
         System.out.print("喝绿茶");
     }
     public void drinkAfter(){
         System.out.print("刷杯子");
     }
    }

创建具体工厂类

    class GreenTeaFactory extends TeaFactory{
     @Override
     public Tea getTea(){
         return new GreenTea();
     }
    }

调用具体工厂类的方法,从而创建不同具体产品类的实例

    public class client{
     public static void main(Strings[] args){
         TeaFactory greenTeafactory = new GreenTeaFactory();
         Tea tea = greenTeafactory.getTea();
         tea.drink();
         tea.drinkAfter();
     }
    }

优点:

符合开闭原则,当新增加产品时,增加具体产品类和相应的工厂子类即可;
符合单一职责原则,每个具体工厂类只负责创建对应的产品;
不适用静态工厂方法,可以形成基于继承的等级结构;

缺点:

添加新产品时,类的个数成对增加,在一定程度上增加了系统的复杂度。同时更多的类需要编译和运行,会给系统带来一些额外的开销;
虽然保证了工厂类的开闭原则,但对于使用工厂方法的类,如需产品变更时,仍需修改实例化的具体工厂类;
一个具体工厂只能创建一个具体产品;

总结:
工厂模式是简单工厂模式的进一步抽象和扩展,保留简单工厂的封装优点的同时,让扩展变得简单,让继承变得可行,增加了多态性的体现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值