设计模式-抽象工厂模式

什么是抽象工厂模式

抽象工厂模式(AbstractFactory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

工厂模式与抽象工厂模式的区别

在工厂模式中,创建一个形状接口,接口中有一个图形方法,让实现了这个接口的类,都重写这个方法,以此表示自身是什么形状,然后创建一个形状工厂类,通过工厂,获取你想要的对象实例。
在这些操作中,操作者不会知道里面的逻辑代码,只需要知道自己需要调用的形状。

  ShapeFactory shapeFactory = new ShapeFactory();
          // 获取 Circle 的对象,并调用它的 draw 方法
          Shape shape1 = shapeFactory.getShape("CIRCLE");
  

但问题来了,如果只是需要一个形状,那么工厂模式就可以满足。但如果我需要特定颜色的形状呢?比如红色的圆形,蓝色的正方形等等,也许说再在接口中创建一个颜色方法,让实现了这个接口的类重写颜色方法,但是,这样就是写死了的,并且非常麻烦,我想要红圆、白圆、黑圆,难道就继续这样写?
这时,抽象工厂模式就出来了。
抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,无须指定它们具体的类。
流程:一部分与工厂模式相同,创建一个超级工厂,这个工厂是一个抽象类,让具体的工厂(形状工厂、颜色工厂)继承它,重写抽象里面的方法(图形方法、颜色方法),在对应的方法中编写对应的逻辑代码(形状工厂在图形方法中写、颜色工厂在颜色方法中写),创建一个工厂厂商(FactoryProducer),通过厂商得到你想要的具体工厂,再通过具体工厂获取你想要的对象实例。

//获取形状工厂
            AbstractFactory shapeFactory = FactoryProducer.getFactory("SHAPE");
       
            //获取形状为 Circle 的对象
            Shape shape1 = shapeFactory.getShape("CIRCLE");
       
            //调用 Circle 的 draw 方法
           
  shape1.draw();
  
  //获取颜色工厂
            AbstractFactory colorFactory = FactoryProducer.getFactory("COLOR");
       
            //获取颜色为 Red 的对象
            Color color1 = colorFactory.getColor("RED");
       
            //调用 Red 的 fill 方法
           
  color1.fill();

优缺点

优点

  1. 增加新的具体工厂和产品很方便,无须修改已有工厂,符合“开闭原则”(对扩展开放,对修改关闭)。

  2. 抽象工厂模式隔离了具体类的生产,使得客户并不需要知道什么被创建。

  3. 当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。

缺点

增加新的产品等级结构很复杂,需要修改抽象工厂和所有的具体工厂类,对“开闭原则”的支持呈现倾斜性。

参考

https://www.runoob.com/design-pattern/design-pattern-intro.html

https://blog.csdn.net/shaohengwei/article/details/90898522

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值