当前位置: 首页 > news >正文

《java与模式》学习系列——抽象工厂模式

 

一、 抽象工厂模式的结构

所下图所示:

适用情况:

1、一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节,这对于所有 形态的工厂模式都是重要的。

2、这个系统的产品有多于一个的产品族,而系统只消费其中某一族的产品(上面这一条叫做抽象工厂的原始用意)

3、同属于同一个产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来。

4、系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现。

二、抽象 工厂模式在java中的应用

java AWT

javaAWT库中,定义了两套平等的等级结构;一套是Java构件,以Component为超类,另一套是所谓的peer构件,以ComponentPeer为超类。Java构件向java程序提供一套与操作系统无关的、统一的构件接口;而Peer构件则处理底层的、与操作系统密切相关的功能。在这两个等级结构之间的,是java.awt.Toolkit类;这个抽象类在不同的操作系统中有不同的具体子类,并为每一个Peer构件提供了相应的工厂方法,以创建并且返还一个Peer构件的实例。Toolkit就是抽象工厂角色,它的具体实现是具体工厂角色;而各个peer对象就是具体产品角色。Peer对象根据自己的分类形成继承的等级结构;而根据操作系统划分成不同的产品族。这种三重接口的架构,叫做Peer架构。显然Peer架构是桥梁模式的应用。

 

 

相关文章:

  • HTTP——学习笔记(7)
  • 《java与模式》学习系列——单例模式
  • UML中类之间的关系
  • 找出数组中两个只出现一次的数字
  • python学习之字典
  • 《java与模式》学习系列——适配器模式
  • javascript模板库jsrender加载并缓存外部模板文件
  • 《java与模式》学习系列——装饰模式
  • 初始化Git的配置
  • 《java与模式》学习系列——享元模式
  • Java WebService 简单实例
  • java.lang.instrument使用
  • 《java与模式》学习系列——门面模式
  • 《java与模式》学习系列——桥梁模式
  • 《java与模式》学习系列——观察者模式
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • flutter的key在widget list的作用以及必要性
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • input实现文字超出省略号功能
  • Java 23种设计模式 之单例模式 7种实现方式
  • Javascript 原型链
  • jdbc就是这么简单
  • Markdown 语法简单说明
  • PHP的类修饰符与访问修饰符
  • Redis 中的布隆过滤器
  • SpringCloud集成分布式事务LCN (一)
  • storm drpc实例
  • ubuntu 下nginx安装 并支持https协议
  • 从伪并行的 Python 多线程说起
  • 飞驰在Mesos的涡轮引擎上
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 用jQuery怎么做到前后端分离
  • mysql面试题分组并合并列
  • ​ArcGIS Pro 如何批量删除字段
  • ​LeetCode解法汇总518. 零钱兑换 II
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (一)VirtualBox安装增强功能
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • .NET 4.0中的泛型协变和反变
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET命令行(CLI)常用命令
  • .so文件(linux系统)
  • ??javascript里的变量问题
  • [30期] 我的学习方法
  • [C++核心编程](四):类和对象——封装
  • [CSS]盒子模型
  • [CSS]文字旁边的竖线以及布局知识