博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
创建型设计模式——抽象工厂模式
阅读量:7144 次
发布时间:2019-06-29

本文共 2768 字,大约阅读时间需要 9 分钟。

《Android源码设计模式解析与实战》读书笔记(六)

一、抽象工厂模式简介

1.1、定义

为创建一组相关或者是相互依赖的对象提供一个接口,而不需要指定它们的具体类。

1.2、使用场景

一个对象族有相同的约束时可以使用抽象工厂模式。 举个例子: Android、iOS、Window Phone下都有短信软件和拨号软件,两者都属于Software软件的范畴,但是,他们所在的操作系统平台不一样,即便是同一家公司出品的软件,其代码的实现逻辑也是不同的,这时候就可以考虑使用抽象工厂方法模式来产生Android、iOS、Window Phone下的短信软件和拨号软件。

二、抽象工厂方法模式的简单实现

public abstract class CarFactory {    /**     * 生产轮胎     * @return     */    public abstract ITire createTire();    /**     * 生产发动机     * @return     */    public abstract IEngine createEngine();    /**     * 生产制动系统     * @return     */    public abstract IBrake createBrake();}复制代码

为每一种零部件产品定义一个接口

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("高级制动");    }}复制代码
//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();    }}复制代码
//构造一个生产Q3的工厂CarFactory factoryQ3 = new Q3Factory();factoryQ3.createTire().tire();factoryQ3.createEngine().engine();factoryQ3.createBrake().brake();System.out.println("-----------------------------------------------------");CarFactory factoryQ7 = new Q7Factory();factoryQ7.createTire().tire();factoryQ7.createEngine().engine();factoryQ7.createBrake().brake();复制代码

输出如下:

三、总结

3.1、优点

  • 分离接口与实现,客户端使用抽象工厂来创建需要的对象,而客户端根本就不知道具体的实现是谁,客户端只是面向产品的接口编程而已,使其从具体的产品实现中解耦,同时基于接口与实现的分离,使抽象该工厂方法模式在切换产品类时更加灵活、容易。

3.2、缺点

  • 类文件的爆炸性增加
  • 不太容易扩展新的产品类,因为每当增加一个产品类就需要修改抽象工厂,那么所有的具体工厂类均会被修改。

学海无涯苦作舟

转载地址:http://iszgl.baihongyu.com/

你可能感兴趣的文章
C语言中的 (void*)0 与 (void)0
查看>>
DIV固定在页面某个位置,不随鼠标滚动而滚动
查看>>
android 根据SD卡中图片路径读取并显示SD中的图片——源代码
查看>>
浅析Android线程模型一 --- 转
查看>>
Cocos2d-x PluginX (二)增加新的Plugin
查看>>
python-django开发学习笔记四
查看>>
cocos2d-x开发记录:二,基本概念(导演,场景,层和精灵,场景切换,效果)...
查看>>
Binutils工具集中的一些比较常用的工具
查看>>
IoC在ASP.NET Web API中的应用
查看>>
Android手机 Fildder真机抓包
查看>>
jsp里面实现asp.net的Global文件内容。
查看>>
Oracle ROWID
查看>>
(转)为C# Windows服务添加安装程序
查看>>
使用Team Foundation Server 2012源代码管理基本
查看>>
WCF服务通信测试
查看>>
dos命令dir查找文件的用法及实例
查看>>
Hadoop守护进程【简--】
查看>>
fdm_search_info_w_book_chain
查看>>
协方差的意义
查看>>
Windows下Git安装指南
查看>>