设计模式之抽象工厂模式

抽象工厂模式

  • 定义:

    ​ 定义一个用于创建对象的接口,让子类决定实例化哪一个类。抽象工厂模式是所有工厂模式中最为抽象和最具一般性的一种形态。
    抽象工厂模式是所有工厂模式中最一般的形式,当抽象工厂模式退化到只有一个产品等级结构时,就变成了工厂方法模式;当工厂方法模式的工厂类只有一个时,且工厂方法为静态方法时,就变成了简单工厂模式。

  • 使用场景:

    提供了一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。

  • UML:

    1. AbstractProductA表示抽象产品A。
    2. ProductA1和ProductA2均是AbstractProductA的子类。
    3. AbstractProductB表示抽象产品B。
    4. ProductB1和ProductB2均是AbstractProductB的子类。
    5. AbstractFactory表示抽象工厂类。
    6. AbstractFactory1和AbstractFactory2是AbstractFactory的子类。
    7. AbstractFactory1可以创建ProductA1和ProductB1的实例,而AbstractFactory2可以创建ProductA2和ProductB2的实例。

    在这里插入图片描述

  • 优点:

    1. 抽象工厂模式最大的好处就是易于交换产品系列,由于具体的工厂类在同一个应用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,它只需要改变具体工厂即可使用不同的产品配置。
    2. 它让具体的创建实例过程与客户端分离,客户端是通过它们的抽象接口操作实例的,产品的具体类名也被具体工厂实现分离,不会出现在客户代码中。
  • 缺点:

    ​ 产品族的扩展将是一件十分费力的事情,假如产品族中需要增加一个新的产品,则几乎所有的工厂类都需要进行修改。所以使用抽象工厂模式时,对产品等级结构的划分是非常重要的。

  • 样例:

    public interface AbstractProductA{
        
    }
    
    public class ProductA1 implements AbstractProductA{
    	
    }
    
    public class ProductA2 implements AbstractProductA{
        
    }
    
    public interface AbstractProductB{
        
    }
    
    public class ProductB1 implements AbstractProductB{
    	
    }
    
    public class ProductB2 implements AbstractProductB{
    	
    }
    
    public abstract class AbstractFactory{
        
        public abstract AbstractProductA createProductA();
        
        public abstract AbstractProductB createProductB();
    }
    
    public class Factory1 extends AbstractFactory{
        
        public AbstractProductA createProductA(){
            return new ProductA1() ;
        }
        
        public AbstractProductB createProductB(){
            return new ProductB1() ;
        }
        
    }
    
    public class Factory2 extends AbstractFactory{
    	
    	public AbstractProductA createProductA(){
            return new ProductA2() ;
        }
        
        public AbstractProductB createProductB(){
            return new ProductB2() ;
        }
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值