Android重拾设计模式系列——抽象工厂模式
个人博客CoorChice,https://chenbingx.github.io/ ,最新文章将会首发CoorChice的博客,欢迎探索哦 !
同时,搜索微信公众号CoorChice
,或扫描文章末尾二维码,可以关注我的微信公众号。同期文章也将会优先推送到微信公众号中,以提醒您有新鲜文章出炉。
抽象工厂模式和工厂方法模式很相似,都是延迟子类选择创建,但它们的不同点在于:
工厂方法模式专注于创建单个完整的产品,而抽象工厂模式专注于创建构一个完整产品的所有部件。比如说,工厂方法模式创建一把单手剑,而抽象工厂模式需要创建剑柄、剑体、需要用的材料等。它们思想相同,但关注点不一样。工厂方法模式可以理解为宏观,而抽象工厂模式可以理解为微观。
[工厂方法模式传送门]
定义及实质
- 定义
提供创建一系列相关或相互依赖的对象的接口,而无需指定它们的具体类。
- 实质
选择产品簇的实现。
模式图解
抽象工厂模式UML图
从上图可以看出:
- 首先定义了一个抽象工厂类AbstractFactory,它相当于一个模版,它能够生产具有相关关系的产品A、B,其子类工厂按照这个规范进行扩展;
- 定义两种产品接口(产品模版),AbstarctProductA和AbstarctProductB,它们是相关的产品类型,比如说剑柄和剑体;
- 继承抽象工厂类AbstractFactory,定义两种不同的工厂,分别用于生产1系列产品和2系列产品。
下面是工厂类:
//抽象工厂类AbstractFactory public abstract class AbstractFactory{ public abstract AbstractProductA createProductA(); public abstract AbstractProductB createProductB(); } //1系列产品工厂 public class ConcreteFactory1{ @Overrid public AbstractProductA createProductA(){ return new ProductA1(); } @Overrid public AbstractProductB createProductB(){ return new ProductB1(); } } //2系列产品工厂 public class ConcreteFactory1{ @Overrid public AbstractProductA createProductA(){ return new ProductA2(); } @Overrid public AbstractProductB createProductB(){ return new ProductB2(); } }
下面是产品类:
//A类产品接口(模版) public interface AbstractProductA{ void doSomthing(); } //A1产品 public class ProductA1 implement AbstractProductA{ @Overrid public void doSomething(){ System.out.println("ProductA1"); } } //A2产品 public class ProductA2 implement AbstractProductA{ @Overrid public void doSomething(){ System.out.println("ProductA2"); } } //B类产品接口(模版) public interface AbstractProductB{ void doSomthing(); } //B1产品 public class ProductB1 implement AbstractProductB{ @Overrid public void doSomething(){ System.out.println("ProductB1"); } } //B2产品 public class ProductB2 implement AbstractProductB{ @Overrid public void doSomething(){ System.out.println("ProductB2"); } }
下面看看Client客户端如何使用:
public class Client{ public static void main(String[] args){ //现在需要创建1系列产品 AbstractFactory factory = new ConcreteFactory1(); ProductA a1 = factory.createProductA(); ProductB b1 = factory.createProductB(); //接下来创建2系列产品 factory = new ConcreteFactory2(); ProductA a2 = factory.createProductA(); ProductB b2 = factory.createProductB(); } }
抽象工厂模式顺序图
结合上面代码来看顺序图。
模式优缺点
优势
- 封装复杂创建逻辑;
- 解耦Client和产品;
- 方便切换产品簇,只需更换工厂实例就行。
缺点
- 不容易扩展新产品,当需要增加新的产品类型时,不得不把之前的每个工厂类都修改;
- 容易造成选择层次的复杂,因为当产品类型多时,配置方案也将增加。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Android项目实战(二十八):Zxing二维码实现及优化
前言: 多年之前接触过zxing实现二维码,没想到今日项目中再此使用竟然使用的还是zxing,百度之,竟是如此牛的玩意。 当然,项目中我们也许只会用到二维码的扫描和生成两个功能,所以不必下载完整的jar包,使用简化版的即可,下文可见。 这篇文章讲述:1、如果快速在项目中集成zxing,实现扫描和生成二维码功能 2、根据项目需求去修改源码实现我们的要求并进行优化 一、快速集成zxing二维码 1、下载库文件 :http://download.csdn.NET/detail/u013210620/9036083 ,文件名:BarCodeTest 下载完成后可以看到: 我们从这些文件中拷贝需要的到自己的项目中,下面开始: ①、res 目录下 : raw文件夹 整个复制到个人项目相对位置 ②、res --> values目录下:ids.xml文件中的内容全部复制到个人项目相对位置,个人项目没有则直接复制文件到相对位置 ③、res --> values目录下:colors.xml文件中的内容全部复制到个人项目的相对位置 ④、res --> layou...
- 下一篇
Android重拾设计模式系列——单例模式的5种实现
个人博客CoorChice,https://chenbingx.github.io/ ,最新文章将会首发CoorChice的博客,欢迎探索哦 ! 同时,搜索微信公众号CoorChice,或扫描文章末尾二维码,可以关注我的微信公众号。同期文章也将会优先推送到微信公众号中,以提醒您有新鲜文章出炉。 封面-设计模式.png 单例模式是我们最常使用,也是最简单的一种模式,主要用于只想系统中存在一个实例的情况,比如某个Manager。 定义及实质 定义 确保某一个类只有一个实例,而且自行实例化并向系统提供这个实例。 实质 控制实例数量,确保只有一个实例。 模式图解 单例模式UML图 单例模式UML图 很直观明了,很简单。下面来看看单例模式的不同实现方案。 饿汉式 public class Singleton{ private static fianl Singleton instance = new Singleton(); //私有化构造器,避免外部访问。使用反射仍然可以访问,所以安全是相对的。 //但仍然可以通过哈希值等进行限制,提高安全性。 priavte Singleton(){ } /...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2整合Redis,开启缓存,提高访问速度