抽象工厂模式

因为抽象工厂模式在spring中用的比较多,例如spring的心脏BeanFactory就是利用抽象工厂模式来管理bean的。最主要的就是把具体功能抽象出来

上代码

先建立产品的接口方法类

/**
 * 定义一个牛奶的接口
 */
public interface Milk {
    String getName();
}

产品实现功能

/**
 * 伊利产品
 */
public class Erie implements Milk {
    @Override
    public String getName() {
        return "伊利";
    }
}
/**
 * 蒙牛产品
 */
public class Mengniu implements Milk {
    @Override
    public String getName() {
        return "蒙牛";
    }
}

创建抽象工厂类

/**
 * 抽象工厂生产那些产品
 */
public abstract class AbstractFactory {
    abstract Milk getMengniu();
    abstract Milk getErie();
}

创建具体产品类

/**
 * 具体怎么生产
 */
public class MilkFactory extends AbstractFactory {
    @Override
    Milk getMengniu() {
        return new Mengniu();
    }
    @Override
    Milk getErie() {
        return new Erie();
    }
}

对外的调用类

 MilkFactory milkFactory = new MilkFactory();
 // 当增加产品时,调用方根本不需要改东西,只管有没有具体方法
 milkFactory.getSanlu().getName();
优点
  • 降低耦合 抽象工厂模式将具体产品的创建延迟到具体工厂的子类中,这样将对象的创建封装起来,可以减少客户端与具体产品类之间的依赖,从而使系统耦合度低,这样更有利于后期的维护和扩展;
  • 更符合开-闭原则新增一种产品类时,只需要增加相应的具体产品类和相应的工厂子类即可;而简单工厂模式需要修改工厂类的判断逻辑
  • 符合单一职责原则每个具体工厂类只负责创建对应的产品
缺点

抽象工厂模式很难支持新种类产品的变化。
这是因为抽象工厂接口中已经确定了可以被创建的产品集合,如果需要添加新产品,此时就必须去修改抽象工厂的接口,这样就涉及到抽象工厂类的以及所有子类的改变,这样也就违背了“开发——封闭”原则

类图
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值