抽象工厂设计模式(创建类)

来源:互联网 发布:天刀真武男捏脸数据 编辑:程序博客网 时间:2024/04/29 08:50

UML

这里写图片描述

介绍

  • 意图:提供一个创建一系列相互依赖对象地接口,而无需指定它们具体的类
  • 使用场景举例: 1.QQ换皮肤,一整套一起换。2.生成不同操作系统的程序(Windows , Linux )
  • 优点: 1.封装性,每个产品的实现类不是高层模块关心的,它关心的是接口。2.产品族内的约束是非公开状态。
  • 缺点:产品族扩展困难,添加一个产品族需要修改抽象工厂接口,并且需要修改所有工厂实现类的方法,但产品等级修改容易。即为纵向修改困难,横向修改容易

例子

UML
这里写图片描述

Human

public interface Human {    public void getColor() ;     public void getSex() ; }

AbstarctBlackHuman(AbstractProductA)

public abstract class AbstractBlackHuman implements Human{    @Override    public void getColor(){        System.out.println("黑人的肤色是黑色的");    }}

AbstractYellowHuman(AbstractProductB)

public abstract class AbstractYellowHuman implements Human{    @Override    public void getColor() {        System.out.println("黄种人的肤色是黄色");    }   }

FemaleBlackHuman(ProductA1)

public class FemaleBlackHuman extends AbstractBlackHuman{    @Override    public void getSex() {        System.out.println("我是女的");    }}

MaleBlackHuman(AbstractProductA2)

public class MaleBlackHuman extends AbstractBlackHuman{    @Override    public void getSex() {        System.out.println("我是男的");    }}

FemaleYellowHuman(AbstractProductB1)

public class FemaleYellowHuman extends AbstractYellowHuman{    @Override    public void getSex() {        System.out.println("我是女的");    }}

MaleYellowHuman(ProductB2)

public class MaleYellowHuman extends AbstractYellowHuman{    @Override    public void getSex() {        System.out.println("我是男的");    }}

FemaleFactory(Factory1)

public class FemaleFactory implements HumanFactory{    @Override    public Human createYellowHuman() {        return new FemaleYellowHuman() ;     }    @Override    public Human createBlackHuman() {        return new FemaleBlackHuman() ;     }}

MaleFactory(Factory2)

public class MaleHumanFactory implements HumanFactory{    @Override    public Human createYellowHuman() {        return new MaleYellowHuman() ;     }    @Override    public Human createBlackHuman() {        return new MaleBlackHuman();    }}

NvWa(Client)

public class NvWa {    public static void main(String[] args) {        HumanFactory maleHumanFactory = new MaleHumanFactory() ;         Human maleBlackHuman = maleHumanFactory.createBlackHuman() ;         Human maleYellowHuman = maleHumanFactory.createYellowHuman() ;         maleBlackHuman.getColor();          maleBlackHuman.getSex();          System.out.println("=======================分割线=======================");        maleYellowHuman.getColor();          maleYellowHuman.getSex();          System.out.println("=======================分割线=======================");                HumanFactory femaleHumanFactory = new FemaleFactory() ;        Human femaleBlackHuman = femaleHumanFactory.createBlackHuman() ;         Human femaleYellowHuman = femaleHumanFactory.createYellowHuman() ;         femaleBlackHuman.getSex();          femaleBlackHuman.getColor();          System.out.println("=======================分割线=======================");                femaleYellowHuman.getSex();         femaleYellowHuman.getColor();    }}

结果

黑人的肤色是黑色的我是男的=======================分割线=======================黄种人的肤色是黄色我是男的=======================分割线=======================我是女的黑人的肤色是黑色的=======================分割线=======================我是女的黄种人的肤色是黄色

参考

  • <<设计模式之禅>>
  • 菜鸟教程
0 0
原创粉丝点击