设计模式之抽象工程模式
前言
今天要介绍的抽象工厂模式将考虑多等级产品的生产,将同一个具体工厂所生产的位于不同等级的一组产品称为一个产品族,下图所示的是海尔工厂和 TCL 工厂所生产的电视机与空调对应的关系图。
模式的定义与特点
抽象工厂(AbstractFactory)模式的定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。
使用抽象工厂模式一般要满足以下条件。
可以在类的内部对产品族中相关联的多等级产品共同管理,而不必专门引入多个新的类来进行管理。
当需要产品族时,抽象工厂可以保证客户端始终只使用同一个产品的产品组。
抽象工厂增强了程序的可扩展性,当增加一个新的产品族时,不需要修改原代码,满足开闭原则。
其缺点是:当产品族中需要增加一个新的产品时,所有的工厂类都需要进行修改。增加了系统的抽象性和理解难度。
模式的结构与实现
抽象工厂模式同工厂方法模式一样,也是由抽象工厂、具体工厂、抽象产品和具体产品等 4 个要素构成,但抽象工厂中方法个数不同,抽象产品的个数也不同。现在我们来分析其基本结构和实现方法。
模式的结构
抽象工厂模式的主要角色如下。
抽象工厂(Abstract Factory):提供了创建产品的接口,它包含多个创建产品的方法 newProduct(),可以创建多个不同等级的产品。
具体工厂(Concrete Factory):主要是实现抽象工厂中的多个抽象方法,完成具体产品的创建。
抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能,抽象工厂模式有多个抽象产品。
具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间是多对一的关系。
抽象工厂模式的主要角色如下:
实现
我是写了一个手机的相关东西和开头说的海尔冰箱空调电视差不多。
具体实现如下:
手机接口:
public interface IPhoneProduct {void start();void shutdown();void callup();void sendSMS();
}
路由器接口:
public interface IRouterProduct {void start();void shutdown();void openWife();void setting();
}
抽象产品工厂:
public interface IProductFactory {IPhoneProduct iphponeproduct();IRouterProduct irouterproduct();
}
小米手机类:
public class XiaoMiPhone implements IPhoneProduct{@Overridepublic void start() {System.out.println("开启小米手机");}@Overridepublic void shutdown() {System.out.println("关闭小米手机");}@Overridepublic void callup() {System.out.println("小米打电话");}@Overridepublic void sendSMS() {System.out.println("小米发短信");}}
实现类:
System.out.println("==============小米系列产品===============");XiaomiFactory xiaomiFactory=new XiaomiFactory();IPhoneProduct iPhoneProduct=xiaomiFactory.iphponeproduct();iPhoneProduct.callup();iPhoneProduct.sendSMS();IRouterProduct iRouterProduct=xiaomiFactory.irouterproduct();iRouterProduct.shutdown();iRouterProduct.openWife();System.out.println("==============华为系列产品===============");HuaweuFactory huaweuFactory=new HuaweuFactory();IPhoneProduct iPhoneProduct1=huaweuFactory.iphponeproduct();iPhoneProduct1.callup();iPhoneProduct1.sendSMS();IRouterProduct iRouterProduct1=huaweuFactory.irouterproduct();iRouterProduct1.shutdown();iRouterProduct1.openWife();
输出结果:
==============小米系列产品===============
小米打电话
小米发短信
开启小米路由器
打开小米WiFi
==============华为系列产品===============
华为打电话
华为发短信
关闭华为路由器
打开华为路由器WiFi
总结
我们要把抽象工厂类当成一个生成工厂类的一个类,它只能再加一个系列,不能增加一个具体的类,最好我们是能想一个小的案例来敲一遍代码,再结合上面的说明来看就能明白了,设计模式中最重要的是明白这个思想而不是只搞懂这一个例题。
完整代码:
链接:https://pan.baidu.com/s/1I82K7pcIrsXQD7FtmSAfNA
提取码:1234
设计模式之抽象工程模式相关推荐
- 【设计模式】 - 创建者模式 - 工厂方法模式、抽象工程模式
工厂方法模式.抽象工程模式 前言 工厂方法模式. 抽象工程模式 1. 简单工厂模式(不属于GOF的23种经典设计模式) 1.1 结构 1.2 实现 缺点 2. 工厂方法模式 2.1 结构 2.2 实现 ...
- 设计模式系列·抽象工厂模式
前言 以小说的笔法写的设计模式系列文章,你绝对看得懂![首发于公众号:"聊聊代码"] 设计模式系列·王小二需求历险记(一) 设计模式系列·王小二需求历险记(二) 设计模式系列·封装 ...
- 设计模式三—抽象工厂模式
设计模式三-抽象工厂模式 一.定义 抽象工厂模式是工厂方法模式的进一步抽象.如果产品簇中只有一种产品,则退化为工厂方法模式. 二.原理图 三.代码实例 * 苹果和土豆是园丁1的杰作 * 葡萄和西红柿是 ...
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Facto ...
- 设计模式复习-抽象工厂模式
设计模式复习-抽象工厂模式 有两种硬件,PC和Phone,有两种系统,Windows和Linux,现在假设PC和Phone上全都能安装这两个系统,并且将来硬件不会在变化,但是系统可能需要扩展,比如扩展 ...
- 设计模式之四(抽象工厂模式第三回合)
原文:设计模式之四(抽象工厂模式第三回合) 前言 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂模式最大的好处便是易于交换产品系列,由于具体工厂类,例如I ...
- python抽象工厂模式_Python设计模式之抽象工厂模式
Python设计模式之抽象工厂模式 这篇文章主要为大家详细介绍了Python设计模式之抽象工厂模式,感兴趣的小伙伴们可以参考一下 python面向对象编程入门,我们需要不断学习进步 "&qu ...
- 设计模式-04抽象工厂模式
设计模式-04抽象工厂模式 文章中涉及到的代码,请自行下载 https://gitee.com/pan_xiao_lei123/designmode.git 前面介绍的工厂方法模式中考虑的是一类产品的 ...
- C#设计模式(4)——抽象工厂模式
C#设计模式(4)--抽象工厂模式 一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法 ...
最新文章
- tendermint+java_tendermint简介
- 原来这就是Java代码生成器的原理啊,太简单了
- pthread 立即停止线程_线程取消(pthread_cancel)
- 【Linux系统编程】Linux系统调用
- Hard Disk Drive HDU - 4788——24行代码AC,解题报告
- 【离散数学】图的基本概念和结论
- 软路由ros(MIKROTIK)安装教程:[3]ROS注册
- python接球游戏
- HDU2006 求奇数的乘积【入门】
- PyTorch学习笔记(二):PyTorch简介与基础知识
- ubb php论坛程序,论坛UBB代码 推荐
- 西门子PLC,STEP7 v5.5安装以及仿真软件Plcsim v5.4 sp5安装
- 前端之vue表格居中处理
- 文件删不掉需要管理员权限?分享解决方法
- 摸鱼也有底线,如何克服社会性懈怠
- 襄阳职业技术学院计算机技能高考,2021湖北技能高考襄阳职业技术学院怎么报名?...
- 关于虚拟机中安装Ubuntu时界面显示不全的解决办法
- 计算机科学与昆虫,基于视觉的昆虫物种识别算法研究
- Combining Visual Cues with Interactions for 3D–2D Registration in Liver Laparoscopy翻译
- week05-继承、多态、抽象类与接口
热门文章
- No module named ‘brainpy‘
- [游戏]_纪念一下dnf,安心准备考研
- Deeplab实战:使用deeplabv3实现对人物的抠图
- 基于阿里Semantatic Human Matting算法,实现精细化人物抠图
- 装修找哪家装修公司?新房收房时有哪些注意事项?
- Tcl与Design Compiler (五)——综合库(时序库)和DC的设计对象
- mongodb下载安装及Mongo Management Studio视图工具安装
- ju 单元测试_人教版三年级语文上册各单元测试题
- 【独家打造】DOGX wallet钱包注册下载以及量化收益操作教程
- django的登录注册系统