`
zhunmumu
  • 浏览: 28786 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java设计模式学习笔记--抽象工厂模式

 
阅读更多

抽象工厂模式:此模式提供了一个接口,用于创建相关或者依赖对象的家族,

而不需要指定具体的实现类。
抽象工厂模式允许客户使用抽象接口来创建一组相关的产品,
客户类和工厂类分开,客户需要任何产品的时候,只需要向工
厂请求即可,客户无须修改就可以获得新产品。这样一来,客
户就从具体产品中解耦。

抽象工厂模式的UML结构图如下:


 

模式结构说明:

AbstractFactory:抽象工厂。抽象工厂定义了一个接口,所有的具体工厂都必须实现此接口,这个接口包含了一组方法用来生产产品。

ConcreteFactory:具体工厂。具体工厂是用于生产不同产品族。要创建一个产品,客户只需要使用其中一个工厂完全不需要实例化任何产品对象。

AbstractProduct:抽象产品。这是一个产品家族,每一个具体工厂都能够生产一整组产品。

Product:具体产品。

 

 

设计原则:(1)多用对象组合,少用继承
所谓对象组合,就是让对象作为类的成员变量,通过构造函
数或者set方法给类对象的实例变量赋值。
(2)针对抽象编程,不针对实现编程
当设计一个软件系统的时候,要尽可能地对系统中出现的各
种食物进行抽象,从而建立基础的抽象底层,这样做的目的
就是让软件结构更加框架化、系统化,系统结构更加灵活,
以维护、易扩展。
抽象和具体实现的区别就在于:有了抽象,能做很多事情,
并且新增功能不会对原系统的稳定性造成影响,系统更加模
块化,软件更加易复用;而具体实现只能完成一件事情,并
且新增功能对原系统影响比较大,对于相同结构软件不能复
用,大大降低了开发效率,而且程序不易扩展。
(3)产品对象通过工厂暴露的方法创建
使用场合:
(1)创建产品家族,相关产品集合在一起使用的时候;
(2)想要提供一个产品类库,并只想显示其接口而不是实现时;
(3)通过组合的方式使用工厂时。
抽象工厂模式提供一个接口,用于创建相关或者依赖对象的家族,而不需要
指定具体实现类。抽象工厂模式是指当有多个抽象角色时使用的一种工厂模
式。抽象工厂模式可以向客户端提供一个接口,使用客户端在不必指定具体
产品的情况下,创建多个产品族中的产品对象。当有多个抽象产品角色是,
工厂方法模式已经不能满足要求。
抽象工厂模式和工厂方法模式的区别:
(1)工厂方法模式通过继承的方式实现应用程序的解耦,而抽象工厂模式则
通过对象组合的方式实现应用程序的解耦。
(2)工厂方法模式用来创建一个抽象产品,具体工厂实现工厂方法来创建具
体产品,而抽象工厂模式用来创建一个产品家族的抽象类型。

抽象工厂模式提供一个接口,用于创建相关或者依赖对象的家族,而不需要
指定具体实现类。抽象工厂模式是指当有多个抽象角色时使用的一种工厂模
式。抽象工厂模式可以向客户端提供一个接口,使用客户端在不必指定具体
产品的情况下,创建多个产品族中的产品对象。当有多个抽象产品角色是,
工厂方法模式已经不能满足要求。

抽象工厂模式和工厂方法模式的区别:
(1)工厂方法模式通过继承的方式实现应用程序的解耦,而抽象工厂模式则
通过对象组合的方式实现应用程序的解耦。
(2)工厂方法模式用来创建一个抽象产品,具体工厂实现工厂方法来创建具
体产品,而抽象工厂模式用来创建一个产品家族的抽象类型。

 

优点:

1、 抽象工厂隔离了具体类的生成,是的客户端不需要知道什么被创建。所有的具体工厂都实现了抽象工厂中定义的公共接口,因此只需要改变具体工厂的实例,就可以在某种程度上改变整个软件系统的行为。

2、 当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象。

缺点:

添加新的行为时比较麻烦。如果需要添加一个新产品族对象时,需要更改接口及其下所有子类,这必然会带来很大的麻烦。

 

 

分享到:
评论

相关推荐

    Java设计模式学习笔记(1) — 简单工厂

    定义: 结构说明: 相关概念: 接口: 接口与抽象类的区别: 面向接口编程: 功能: 时序图: 优缺点: 代码阐释:

    尚硅谷设计模式源码笔记课件.zip

    共150讲,时长共 33...1) 内容包括: 设计模式七大原则(单一职责、接口隔离、依赖倒转、里氏替换、开闭原则、迪米特法则、合成复用)、UML类图(类的依赖、泛化和实现、类的关联、聚合和组合) 23种设计模式包括...

    Java学习笔记-个人整理的

    {2.9}抽象与接口}{59}{section.2.9} {2.10}访问控制}{60}{section.2.10} {2.10.1}类的属性}{60}{subsection.2.10.1} {2.10.2}类的方法}{61}{subsection.2.10.2} {2.10.3}静态代码块}{62}{subsection.2.10.3} {...

    java版中国象棋源码-hello-design-pattern:设计模式学习笔记

    设计模式学习笔记,此项目参考《大话设计模式》,只能作为入门级设计模式学习 设计原则 职责单一原则 开放-封闭原则 依赖倒转原则 高层模块不依赖底层模块,两个模块都应该依赖抽象。抽象不依赖细节,细节依赖抽象。...

    设计模式笔记(包含所有设计模式)个人总结提炼笔记

    1. 创建型模式:创建型模式关注对象的创建过程,包括简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式和单例模式。这些模式可以帮助我们更灵活地创建对象,避免直接使用new关键字来创建对象,降低...

    Java中的design-patterns::open_book:使用通俗易懂的案例,类图,以及配套学习笔记来详解Java的二十种设计模式!

    参考书籍(推荐): 《Java设计模式 - 刘伟》 , 《图解设计模式 - [日]结城浩》 创建型模式 :check_mark:简单工厂模式( Simple Factor Pattern ) :memo: , :check_mark:工厂方法模式( Factory Method Pattern )...

    酒店管理客房系统Java源码-GOF23:Java实现23种设计模式学习笔记

    酒店管理客房系统Java源码 创建型模式:关注对象的创建过程 :保证一个类只有一个实例,并且提供一个访问该实例的全局访问点 ...抽象工厂模式是工厂模式的一种升级版本。 :分离了对象子组件的单独构造(由Builder来负

    java-design-patterns:java 学习模式

    Java Design Patterns 学习笔记 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...

    java-patterns:Java 23种基本的设计模式整料整理学习,责任链模式过滤器,工厂模式BeanFactory,观察者模式ContextListen等。结合Spring源码理解学习

    describe:设计模式学习笔记 逻辑结构图 代码结构图 设计模式简述 创建型模式,共五种:工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。 结构型模式,共七种:适配器模式,装饰器模式,代理模式,...

    java8源码-akangaroo:学习笔记,完善中

    学习笔记较长,如果想查看文章的目录,chrome浏览器可以配合简悦插件使用,或者下载到本地使用Typora打开。 :hot_beverage: Java基础 Java容器 Java并发 数据结构和算法 数据结构 树 图 算法 分治 动态规划 回溯 ...

    Java开发详解.zip

    031506_【第15章:Java反射机制】_工厂设计模式笔记.pdf 031601_【第16章:Annotation】_系统内建Annotation笔记.pdf 031602_【第16章:Annotation】_自定义Annotation笔记.pdf 031603_【第16章:Annotation】_反射...

    asp.net知识库

    VS2005 ASP.NET本地化学习笔记&感受 在自定义Server Control中捆绑JS文件 Step by Step 深度解析Asp.Net2.0中的Callback机制 使用 Web 标准生成 ASP.NET 2.0 Web 站点 ASP.NET 2.0基于SQLSERVER 2005的aspnetdb.mdf...

    左程云leetcode-hjLearningNotes:hj学习笔记

    第一部分:设计模式 & UML 简单工厂 工厂方法模式 抽象工厂模式 策略模式 责任链模式 命令模式 模板方法模式 适配器模式 代理模式 外观模式 组合模式 装饰模式 享元模式 桥接模式 Builder模式 状态模式 解释器模式 ...

    java基础笔记

    java初学者的学习笔记,很详细。 目录 0 第一节 7月15日 2 一、 IT行业相关介绍 2 二、C、C++和Java语言的比较 2 三、 JDK基础介绍 2 四、 面向对象与面向过程的比较 2 五、 Java相关介绍 2 六、 Path和Classpath...

    leetcode题库-study-prj:学习日记:rocket:

    设计模式共23种(大部分文献也有24种的说法,增加了空对象模式),常用一定要掌握的设计模式:单例模式、工厂模式、抽象工厂模式、策略模式、装饰模式、适配器模式、桥接模式、观察者模式 codetips :closed_book: ...

    博客内容索引(2020-03-22)

    Python学习笔记系列 Hello World Python规范 Python变量 裴波那契数列 Python迭代器 Python函数 Python数据结构 模块及部分常见模块详解   戏说系列 校花系列 我与校花同桌之间的金钱交易(又名:戏说值传递与引用...

Global site tag (gtag.js) - Google Analytics