设计模式之禅——(抽象工厂模式)

定义:

为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类。

抽象工厂模式的通用类图
在这里插入图片描述
抽象工厂是工厂方法模式的升级版本,在多个业务品种、业务分类时,通过抽象工厂模式生产所需要的对象是一种非常好的方式。所以理论上讲,工厂模式能做的事抽象工厂模式来做也没有问题,高版本兼容低版本嘛~

开车了~

女娲造人后传

女娲造人之后发现造出来的人太单调了,因为忘记给人类定义性别了。那现在我们给人类加上性别。其实这里就是一个添加业务品种的过程。

UML图
在这里插入图片描述

//人类接口
public interface Human {
   public void getColor();
   public void talk();
   public void getSex();
}
//白色人种
public abstract class AbstractWhiteHuman implements Human {
    public void getColor(){
       System.out.println("白色人种的皮肤都是白色的");
    }
    public void talk(){
        System.out.println("白种人说话,一般说的都是单子节");
    }
}
//黑色人种
public abstract class AbstractBlackHuman implements Human {
   public void getColor() {
      System.out.println("黑色人种的皮肤颜色是黑色的!");
   }
   public void talk() {
      System.out.println("黑人说话,一般人都听不懂。");
   }
}
//黄色人种
public abstract class AbstractYellowHuman implements Human {
    public void getColor(){
        System.out.println("黄种人的皮肤是黄色的");   
    }
    public void talk(){
        System.out.println("黄种人说话一般都是双字节的");
    }
}

每一个种类都会再有两个实现类,举例黄色人种

//女性
public class FemaleYellowHuman extends AbstractYellowHuman{
    public void getSex(){
        System.out.println("黄种人女性");
    }
}
//男性
public class maleYellowHuman extends AbstractYellowHuman{
    public void getSex(){
        System.out.println("黄种人男性");
    }
}
//工厂接口
public interface HumanFactory {
   public Human createBlaclHuman();
   public Human createYellowHuman();
   public Human createWhiteHuman();
}
//女性工厂
public class FemaleHumanFactory implements HumanFactory{
    public Human createBlackHuman(){
        return new FemaleBlackHuman();
    }
    ...//同上
}
//男性工厂
public class MaleHumanFactory implements HumanFactory{
    public Human createBlackHuman(){
        return new MaleBlackHuman();
    }
    ...//同上
}
//女娲重造人类场景类
public class NvWa{
//要造人首先得有工厂
        HumanFactory maleHumanFactory = new MaleFactory();
        HumanFactory femaleHumanFactory = new FemaleFactory();
//开始造人
        Human maleYellowHuman = maleHumanFactory.createYellowHuman();
        Human femaleYellowHuman = femaleHumanFactory.createYellowHuman();
    }
}

理解的抽象工厂:

1、当业务类别产生时,我们使用工厂模式的升级版本—-抽象工厂模式,可以使代码逻辑十分清楚。
2、同时当业务类别特别多时,如果我们使用工厂模式,那我们就需要记住每个要产生的对象的名字(或指定的字符串),这对于团队来说是很不合理的,A写的代码B需要再去看一遍;但是如果使用抽象工厂就会有代码提示~这个我们肯定有体会

抽象工厂模式也有通用代码,根据上面的UML图可以很简单的得出来

抽象工厂模式的优点

封装性,每个产品的实现类不是高层模块要关心的,它要关心的是接口和抽象,它不关心对象是如何创造的。
产品族的约束是非公开的,比如我生产一个左轮胎就需要生产一个右轮胎。这个是在工厂内默认的,高层模块根本不需要关心这个。

抽象工厂模式的缺点

产品族的拓展性非常差,如果人类再有一种肤色X,那上面的HumanFactory就需要修改,然后它的两个实现类也需要修改,这严重违反了开闭原则

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值