抽象工厂模式Abstract Factory
来源:互联网 发布:网络上刘皇叔是什么梗 编辑:程序博客网 时间:2024/04/30 03:39
简介
有了工厂模式后,怎么还会有多一个抽象工厂呢。可以这么说,工厂模式算是抽象工厂的一个子类,而抽象工厂,可以有很多的子类。抽象工厂就是将工厂的方式抽成一个基类来。举个例子会更好一点。
举例
举一个汽车生产轮胎引擎的例子。我们先抽象出一个汽车工厂类。
public interface CarFactory { ITire createTire(); //创建轮胎 IEngfine createEngfine(); //创建引擎}
而轮胎和引擎的抽象为,这里假设轮胎分为普通轮胎和SUV轮胎,引擎也分为普通引擎和SUV引擎
public interface ITire { void trie();}public interface IEngfine { void engine();}
他们的实现类为
public class NormalEngfine implements IEngfine { @Override public void engine() { }}public class NormalTire implements ITire { @Override public void trie() { }}public class SUVEngfine implements IEngfine { @Override public void engine() { }}public class SUVTire implements ITire { @Override public void trie() { }}
现在,假定我要生产一个普普通通的配件,也就是普通轮胎和普通引擎,现在,我创建一个普通工厂类专门来生产
public class NormalFactory implements CarFactory{ @Override public ITire createTire() { return new NormalTire(); } @Override public IEngfine createEngfine() { return new NormalEngfine(); }}
如果我要生产SUV配件,也就是SUV轮胎和SUV引擎,就可以创建个SUVFactory
public class SUVFactory implements CarFactory { @Override public ITire createTire() { return new SUVTire(); } @Override public IEngfine createEngfine() { return new SUVEngfine(); }}
有人可能就会问啦,为什么要这样啊,创建两个子类出来搞,为什么不直接一个类,然后根据类型去获取对应的型号呢,也就是
public class GeneralFactory implements CarFactory { @Override public ITire createTire(int type) { switch (type) { case 0:return new NormalTire(); case 1:return new SUVTire(); } return null; } @Override public IEngfine createEngfine(int type) { switch (type) { case 0:return new NormalEngfine(); case 1:return new SUVEngfine(); } return null; }}
当然,从实现的角度上看,结果肯定是可行的,但是扩展性太差了,如果此时我想要再添加一个生产普通排气管,普通轮胎,普通引擎的方法,你是不要要在GeneralFactory更改Type,以及每一个方法。如果我又想要生产普通方向盘,手柄这些呢。如果用了抽象工厂的话,只需要继承现有工厂类就可以实现扩展了,扩展性就比较好。
当然抽象工厂方法弊端也有, 不仅需要扩展新的 工厂类 还要扩展 新的组件类 。
0 0
- 抽象工厂模式(Abstract Factory)
- Abstract Factory(抽象工厂模式)
- Abstract Factory抽象工厂模式
- 抽象工厂(Abstract Factory)模式
- Abstract Factory 抽象工厂模式
- Abstract Factory 抽象工厂模式
- 抽象工厂(Abstract Factory)模式
- 抽象工厂模式(Abstract Factory)
- 抽象工厂模式(Abstract Factory)
- 抽象工厂模式(Abstract Factory)
- Abstract Factory 抽象工厂模式
- 抽象工厂模式(Abstract Factory)
- 抽象工厂模式(Abstract Factory)
- 抽象工厂模式(Abstract Factory)
- 抽象工厂模式(Abstract Factory)
- 抽象工厂模式(Abstract Factory)
- 抽象工厂模式 - Abstract Factory
- Abstract Factory 抽象工厂模式
- Activity的生命周期
- 运算符重载典例:Vector-维克多
- OpenResty 环境搭建
- atoi() 函数用来将字符串转换成整数(int)
- 欢迎使用CSDN-markdown编辑器
- 抽象工厂模式Abstract Factory
- eWorld.ASP.Maker.v2017.0.3.x86.Incl.Keygen-DARKSiDERS
- java BpDeep
- Web服务器点击劫持(ClickJacking)的安全防范
- 微信小程序与H5的区别
- 腾讯云Centos7安装Apache +MySQL+PHP +JDK +Tomcat
- 关于OAuth2.0认证的理解和java实现
- 【Spring】——环境搭建
- JavaScript深入浅出——语句(三)