23种设计模式之-----抽象工厂模式(AbstractFactory pattern)
来源:互联网 发布:c语言 变量初始化顺序 编辑:程序博客网 时间:2024/06/05 14:28
抽象工厂模式(Abstract Factory Pattern)是工厂方法模式的进一步抽象,其英文原话"Provide an interface for creating families of related or dependent objects without specifying their concrete classes",翻译,“为创建一组相关或相互依赖的对象提供一个借口,无需指定它们的具体类”。抽象工厂模式通常是用于创一族产品,并且这族产品分不同的等级;不同的具体工厂类生产不同等级的一族产品。抽象工厂模式也有四种角色:抽象工厂、具体工厂、抽象产品和具体产品,具体解释参见“Java 工厂方法模式”一文。
在上文女娲造人的基础上,想把性别分出来,大概刚开始造的人没分什么男女吧~于是有:
男人:
public interface Man {//强壮public void strong();}
女人:
public interface Woman {//漂亮public void beautiful();}
黄种男人:
public class YellowMan implements Man {@Overridepublic void strong() {System.out.println("黄种男人的强壮!");}}
黄种女人:
public class YellowWoman implements Woman{@Overridepublic void beautiful() {System.out.println("黄种女人的漂亮!");}}
白种男人:
public class WhiteMan implements Man {@Overridepublic void strong() {System.out.println("白种男人的强壮!");}}
白种女人:
public class WhiteWoman implements Woman{@Overridepublic void beautiful() {System.out.println("白种女人的漂亮!");}}
黑种男人:
public class BlockMan implements Man{@Overridepublic void strong() {System.out.println("黑种男人的强壮!");}}
黑种女人:
public class BlockWoman implements Woman{@Overridepublic void beautiful() {System.out.println("黑种女人的漂亮!");}}
总工厂:
同时生产男人和女人(此处看作同一产品族,不同肤色看作不同产品等级结构)。
public interface HumanFactory { Man createMan(); Woman createWoman();}
黄种人生产线:
public class YellowFactory implements HumanFactory{@Overridepublic Man createMan() {return new YellowMan();}@Overridepublic Woman createWoman() {return new YellowWoman();}}
白种人生产线:
public class WhiteFactory implements HumanFactory {@Overridepublic Man createMan() {return new WhiteMan();}@Overridepublic Woman createWoman() {return new WhiteWoman();}}
黑种人生产线:
public class BlockFactory implements HumanFactory{@Overridepublic Man createMan() {return new BlockMan();}@Overridepublic Woman createWoman() {return new BlockWoman();}}
女娲开始生产人:
public class Nvwa {public static void main(String[] args) {//创建黄色的男人和女人HumanFactory hf = new YellowFactory();hf.createMan().strong();hf.createWoman().beautiful();//创建黑色的男人和女人HumanFactory wf = new WhiteFactory();wf.createMan().strong();wf.createWoman().beautiful();//创建白色的男人和女人HumanFactory bf = new BlockFactory();bf.createWoman().beautiful();bf.createMan().strong();}}
最后我们看看造人结果:
三种工厂模式的对比:
简单工厂:
优点:
1、屏蔽产品的具体实现,调用者只关心产品的接口。
2、实现简单
缺点:
1、增加产品,需要修改工厂类,不符合开放-封闭原则
2、工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则
工厂方法:优点:
1、继承了简单工厂模式的优点
2、符合开放-封闭原则
缺点:
1、增加产品,需要增加新的工厂类,导致系统类的个数成对增加,在一定程度上增加了系统的复杂性。
抽象工厂:
抽象工厂对开闭原则具有一定的倾斜性,比如以上栗子中,如果你要增加肤色,只需要增加相应的肤色人种和相应的肤色工厂就可以,这样很完美的贴合开闭原则。但是如果你要增加性别,那么你就需要修改所有的工厂,这样完全破坏了开闭原则。
- 23种设计模式之-----抽象工厂模式(AbstractFactory pattern)
- 浅谈 java 设计模式--抽象工厂模式(AbstractFactory pattern)
- AbstractFactory Pattern(抽象工厂模式)
- 设计模式之抽象工厂模式(AbstractFactory)
- 23种设计模式-(AbstractFactory)抽象工厂
- 设计模式C++之七(AbstractFactory抽象工厂模式)
- 【2】设计模式之抽象工厂模式(AbstractFactory)
- 解读设计模式----抽象工厂模式(AbstractFactory Pattern)
- 解读设计模式----抽象工厂模式(AbstractFactory Pattern)
- 设计模式-抽象工厂模式(abstractFactory pattern)
- C#设计模式之抽象工厂(AbstractFactory)
- C#设计模式之抽象工厂(AbstractFactory)
- C#设计模式之抽象工厂(AbstractFactory)
- C#设计模式之抽象工厂(AbstractFactory)
- C#设计模式之抽象工厂(AbstractFactory)
- C#设计模式之抽象工厂(AbstractFactory)
- C#设计模式之抽象工厂(AbstractFactory)
- 设计模式之AbstractFactory(抽象工厂)
- Python-Django-静态文件
- django
- Scala actor
- LigerUI通过Struts2返回并显示
- 大地铆钉
- 23种设计模式之-----抽象工厂模式(AbstractFactory pattern)
- CentOS7安装并配置nginx服务器
- struts2点击切换中英文
- 金融中TA的概念
- Python与机器学习之实战(二)
- 文章标题
- tomcat加载两次项目
- 采购模块存储过程获取
- information_schema系统表——GLOBAL_STATUS and SESSION_STATUS