抽象工厂设计模式(创建类)
来源:互联网 发布:天刀真武男捏脸数据 编辑:程序博客网 时间: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
- 抽象工厂设计模式(创建类)
- 设计模式--创建模式--抽象工厂模式
- 设计模式--创建模式--抽象工厂
- 设计模式-创建型模式-抽象工厂
- 设计模式-创建型模式-抽象工厂
- 【设计模式】创建型模式-抽象工厂
- 创建型设计模式-抽象工厂模式
- 设计模式--创建型--抽象工厂
- 设计模式--创建型-抽象工厂
- 设计模式-创建型03-抽象工厂
- 设计模式-创建型-抽象工厂
- 设计模式【3】:抽象工厂【创建对象】
- 设计模式---创建类型---抽象工厂
- Golang设计模式-创建型-抽象工厂
- 设计模式-创建型-抽象工厂
- 设计模式(抽象工厂类)
- 设计模式--创建模式--抽象工厂模式--java
- java 设计模式-创建模式之抽象工厂模式
- linux fedora 24 source 读取 配置文件 例如 profile
- 用VIM替换掉文件内容里的“\r\n”
- [UNIX系统编程] I/O缓冲
- linux进程间通信----之使用匿名管道
- cocos ui的text设置描边的问题。
- 抽象工厂设计模式(创建类)
- OpenCV学习
- sub 与 function 的区别
- 今日
- cuda编程入门示例4---数组元素求和+计时
- 使用Solr完成自动补全
- 韩语--damdadi
- 记android学习之路----Activity(3)
- C++-模板模式