抽象工厂模式
来源:互联网 发布:全国电视台直播软件 编辑:程序博客网 时间:2024/06/05 13:21
一.背景
抽象工厂意味着生产出来的产品是不确定的,抽象工厂模式起源于以前对不同操作系统的图形化解决方案。
二.抽象工厂模式的定义
为创建一组相关或者是相互依赖的对象提供一个接口,而不需要指定它们的具体类
三.抽象工厂模式的使用场景(还是没看懂)
例子:Android,ios,Window,Phone下都有短信软件,拨号软件,两者都属于Software软件的范畴,但是他们所在的操作系统的平台不一样,即便是同一家公司出品的软件,其代码的实现逻辑也是不同的,这时候就可以考虑使用抽象工厂方法模式来生产Android,ios,Window Phone下的短信软件和拨号软件
四.抽象工厂模式简单实现
Q3,Q5,Q7,可能轮胎发动机不一样,所以不可能是一条生长线出来的
抽象轮胎
public interface ITire { /** * 轮胎 */ void tire(); public class NormalTire implements ITire { @Override public void tire() { System.out.println("普通轮胎"); } } public class SUVTire implements ITire { @Override public void tire() { System.out.println("越野轮胎"); } }}
抽象引擎
public interface IEngine { /** * 轮胎 */ void engine(); public class DomesticEngine implements IEngine { @Override public void engine() { System.out.println("国产发动机"); } } public class ImportEngine implements IEngine { @Override public void engine() { System.out.println("进口发动机"); } }}
抽象刹车
public interface IBrake { /** * 轮胎 */ void brake(); public class NormalBrake implements IBrake { @Override public void brake() { System.out.println("普通刹车"); } } public class SeniorBrake implements IBrake { @Override public void brake() { System.out.println("只能刹车"); } }}
抽象工厂
public abstract class CarFactory { /** * 生产轮胎 * * @return 轮胎 */ public abstract ITire createTire(); /** * 生产发动机 * * @return 发动机 */ public abstract IEngine createEngine(); /** * 生产制动系统 * * @return 制动系统 */ public abstract IBrake createBrake();}
生产Q3的工厂
public class Q3Factory extends CarFactory { @Override public ITire createTire() { return new NormalTire(); } @Override public IEngine createEngine() { return new DomesticEngine(); } @Override public IBrake createBrake() { return new NormalBrake(); }}
生产Q7的工厂
public class Q7Factory extends CarFactory { @Override public ITire createTire() { return new SUVTire(); } @Override public IEngine createEngine() { return new ImportEngine(); } @Override public IBrake createBrake() { return new SeniorBrake(); }}
生产Q5的工厂
public class Client { public static void main(String[] args) { //构造一个生产Q3的工厂 CarFactory factoryQ3 = new Q3Factory(); factoryQ3.createTire().tire(); factoryQ3.createEngine().engine(); factoryQ3.createBrake().brake(); System.out.println("-----------------------------------"); //构造一个生产Q5的工厂 CarFactory factoryQ5 = new Q5Factory(); factoryQ5.createTire().tire(); factoryQ5.createEngine().engine(); factoryQ5.createBrake().brake(); }
缺点:
上面只是模拟了Q3和Q7的工厂,如果此时我们需要增加Q5的工厂呢?对应的轮胎,制动系统和发动机类又要增加,这里就可以看出抽象工厂方法模式的一个弊端,就是类的陡增,如果工厂类过多,势必导致类文件非常多,因此在实际开发过程一定要权衡慎用
总结:
抽象工厂方法模式的优点:
一个显著的优点是分离接口与实现,客户端只是面向产品的接口编程而已,使切换产品类时更加灵活,容易
抽象工厂方法模式的缺点:
(1).类文件的爆炸性增加
(2)是不太容易扩展新的产品类,因为每当我们增加一个产品类就需要修改抽象工厂,那么所有的具体工厂类均会被修改
0 0
- 工厂模式 -- 抽象工厂
- 工厂模式-抽象工厂
- 工厂模式-抽象工厂
- 工厂模式/抽象工厂模式
- 工厂模式&&抽象工厂模式
- 工厂模式---抽象工厂模式
- 工厂模式&抽象工厂模式
- 工厂模式,抽象工厂模式
- 【模式】抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂&工厂模式&抽象工厂模式
- 工厂方法,抽象工厂模式
- 2,工厂模式--抽象工厂
- C#工厂模式-抽象工厂
- 工厂模式与抽象工厂
- 抽象工厂设计模式
- 抽象工厂模式
- hdoj 1428 漫步校园【bfs+dfs】
- Espresso自动化测试(十三)- UiAutomator2与Espresso的结合
- 八皇后问题-回溯算法
- 杭电2955-0-1背包
- LPS最长回文子序列
- 抽象工厂模式
- 基于socket,实现用户注册,用户登录,以及文件上传的例子
- 自定义的一个App搜索框
- hdoj 1429 胜利大逃亡(续)【bfs好题】
- 匹配极其相关问题(一)
- LeetCode 1 - Two Sum ( JAVA )
- CSP考试 2013年12月第4题 C语言实现
- choice 详解
- gmtime和ctime的区别(补)