设计模式之二十四种模式大汇总

目录

    • 类关系
    • 创建型模型
    • 结构型模式
    • 行为型模式

类关系

  • 关联关系
    一个类是另一个类的属性成员。

    • 双向关联
    • 单项关联
    • 自关联
    • 多重性关联:1…1、0…*、。。。。
    • 聚合关系:表示整体和部分的关系
    • 组合关系:整体和部分有同一的生命周期
  • 依赖关系
    一个类的方法中使用另一个类作为参数

  • 泛化关系
    父类和子类之间的关系

  • 接口与实现关系
    接口与类之间存在实现关(realization)系
    在这里插入图片描述

  • 示例
    在这里插入图片描述

tip:该部分参考其他博主:http://t.csdn.cn/5Yjg6

创建型模型

  • 简单工厂
    在这里插入图片描述

用一个Factory类中的一个方法,通过传参不同,if else来判断返回不同Product的子类对象

  • 工厂方法
    在这里插入图片描述

通过配置文件返回Factory的具体子类如:FactoryA对象,然后利用多态执行重写方法,返回对应 的Product

  • 抽象工厂模式
    在这里插入图片描述

通过要生产产品品牌生产所对应的工厂HaierFactory,在该工厂中都是生产该品牌的具体对象,然后再调用具体方法productTV()

  • 建造者模式
    在这里插入图片描述

通过一个Director对象,该对象含有Buider成员,并且在该对象方法construct()函数体中使用多态通过Buider类的具体子类 BuiderA的多个方法 buidFood(),buidDrink().. 最终返回一个 Meal对象。----》不同对象的构建,在于对Buider指向的那个子类

  • 原型模式
    在这里插入图片描述

通过具体原型类`DeepClone`或`ShallowClone`来实现原型接口`ProtoClone`,实现克隆方法。`Client`对象中含有`ProtoClone`对象,和其中属性,在`Coyp()`方法中通过调用接口中的方法,返回一个对象,通过`ProtoClone`指向的对象不同实现多态的克隆方法。

  • 单例模式
    在这里插入图片描述

通过私有换构造方法。在Object类中,含有一个静态的Object对象。

饿汉模式:在初始化时就创建该对象,static Object instance = new Object();通过getInstance()接口访问。

懒汉模式:在第一次调用getInstance()接口时,在函数体中会进行判断,如果instancenull则才创建

结构型模式

  • 适配器模式
    在这里插入图片描述

上图为类适配器,适配器Adapter会继承需要使用的Adaptee类,然后再实现Target接口,并在request()实现中使用specificRequest()完成包装,这样用户client对象就可以使用Target对象完成Adaptee对象的功能。

对象适配器:Adapter会继承Target,会定义一个对象属性Adaptee,在request()中使用适配者的方法。

  • 桥接模式
    在这里插入图片描述

在基类Abstraction中含有Implementor对象,通过set()方式给对象赋值为具体的子类对象,在子类RefinedAbstractionoperation()就可以调用属性对象方法operationlmpl()。因此对属性对象的设置来完成方法实现的多态。

  • 组合模式
    在这里插入图片描述

抽象类Component的子类中,包含具体类leaf和一个容器类Composite。容器类通常含有ArrayList list属性对象,可以通过多态向该容器中添加多种leaf类。其中它们都含有共通的方法operation(),不同的实现。

透明组合:Component中声明了所有管理成员对象的方法,包括Leaf不需要的add()

安全组合:在Composite中声明了用于管理的方法,而Component中没有

  • 装饰模式
    在这里插入图片描述

使用Decorator类,其继承于Component,并且包含Compoent属性对象,该对象可以通过set()方法传入不同的ConcreteComponent对象,在 operation()中调用属性对象的方法component.operation()实现原功能 。在其子类如DecoratorA中,会有新增的方法addedBehavior(),并在重写operation()中额外进行调用。

  • 外观模式
    在这里插入图片描述

对象Facacde中含有SubSystemA B C属性对象,通过特点接口如on(),off(),同时控制其子系统。

  • 享元模式
    在这里插入图片描述

通过享元工厂FlyweightFactory对象将不会变化的具体享元对象ConcreteFlyweight进行存在,在使用的时候根据关键字key使用getFlyweight()返回就可以访问。对于外部状态,可以使用接口operation()在使用时由外部自行设置。

  • 代理模式
    在这里插入图片描述

代理对象Proxy中包含RealSubject属性对象,在实现抽象接口request()时,除了调用对象属性的方法,往往还有该代理对象需要额外执行的操作,如:输出时间或运行结果的log、或进行判断权限判断是否可以执行操作。

远程代理:客户通过代理对象的统一接口进行访问操作,而不需要关系代理对象会进行网络服务访问远端服务器等操作。

虚拟代理:当某个对象的资源消耗比较大的时间,可以使用代理对象,等正需要访问这个对象的某些方法时再进行加载和实例化。

行为型模式

  • 职责链模式
    在这里插入图片描述

通过处理者对象Handler属性中设置上级处理者successor。并且在客户执行时往往调用最底层的处理者对象,在该处理者对象的handlerRequest()方法中会根据条件判断需不需要执行successor的处理方法。

  • 命令模式
    在这里插入图片描述

调用者Invoker中含有命令类Command的对象属性,有调用命令执行execute()的方法。具体命令ConcreteCommand对象中含有接收者对象参数,在重写的方法execute()中使用接收者的处理操作完成命令。

  • 解释器模式
    在这里插入图片描述

通过一定的逻辑来调用具体的表达式子类如TerminalExpression对象,用多态调用interpret()完成翻译操作并返回结构,如表达式运算就返回计算后的结果。

  • 迭代器模式

在这里插入图片描述

提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标。

在具体聚合类中ConcreteAggregate中使用内部类声明具体迭代器Concreteleterator,并通过createIterator()返回一个迭代器对象。

  • 中介者模式
    在这里插入图片描述

抽象同事类ConcreteColleague中含有中介者对象属性,具体中介者类COncreteMediator中有容器存储不同具体的Colleague对象。当调用同事A方法sendMessage()给同事B发消息时,函数中会使用中介者属性对象的方法send(),该方法中会通过参数访问到对象B,然后调用B的返回receive()方法使B接收到信息。

  • 备忘录模式
    在这里插入图片描述

通过负责人Caretaker中有备忘录Memento对象属性,其有方法负责对备忘录对象注入set()和获取get()。原发器Originator中有一个方法createMenento()会返回保存state状态的备忘录对象,并且通过restoreMenento()恢复状态。

  • 观察者模式
    在这里插入图片描述

在目标类Subject中有关于观察者Observer对象的属性集合ArrayList,在notify()方法中会遍历观察者对象,并调用其update()方法。

  • 状态模式
    在这里插入图片描述

环境类中含有状态State对象属性,当使用setState()改变对象属性后,其具体操作方法如handle()中所执行的state.handle()操作会不同。

  • 策略模式
    在这里插入图片描述

环境类Context对象中有策略对象Strategy属性,通过传入具体策略对象A B的不同,algorithm()中调用的方法会实现不同的操作。

  • 模板方法模式
    在这里插入图片描述

将完成不同的功能方法Operator1()放进子类中,会用一个模板方法templateMethod()调用相同Operator3()或不同的方法。通过多态实现。

  • 访问者模式
    在这里插入图片描述

访问者对象Vistor中通过方法vist(A)传参调用重载函数,并且不同具体访问者的操作不同。
元素对象中的accept()接口方法会调用visitor.vist()
对象结构ObjectStructure中有ArrayList属性对象存储不同元素,通过accept(v)方法传入不同的具体访问者,并且遍历元素执行element.accapt(v)方法。其中通过传入的观察者子类对象不同以及观察者方法的重载实现多态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/251256.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

kingview3d在楼宇行业的应用

设计方案: kingview3d 设计目的: 实现三维组态设计效果 应用行业: 三维自来水、三维污水厂、三维泵站、三维煤矿、三维加压泵站等等 设计思路: 1.采用maya或者3dmax设计模型 2.使用HMI、wincc、Intouch、ifix、kingscada等主流的…

KingScada 组合框/列表框使用

组合框和列表框的区别 组合框是一个文本框带一个下拉的选项框,下拉后,选项变化,文本框内的文本显示也随之变化,列表框是一组下拉的列表元素集合。 组合框元素 点击item编辑想要显示的所有选项。 组合框脚本实现 点击连接&#…

kingScada用户登录登出与用户显示 操作权限设置

1. 添加按钮用于用户登录,登出,文本用于显示当前登录的用户 2. 登录函数 logon() 3. 登出函数logoff() 4. 当前用户显示 关联工程中自带的User 字符串型变量 5. 添加用户和角色 在工程中对对象设置优先级,当用户为对应…

kingscada 3.7 复杂文本框获取文件,改变文件格式

1. 在画面中添加复杂文本框,设置横纵向滚动条 2. 在按钮中添加脚本 FileCopy("C:\Users\kkk\Desktop\2345\L11.src", "C:\Users\kkk\Desktop\2345\L11.txt"); UIRichTextBox1.LoadFromFile("C:\Users\kkk\Desktop\2345\L11.txt"); …

kingBase连接工具KStudio安装使用介绍

下载windows版本的安装包 下载试用连接:人大金仓-成为世界卓越的数据库产品与服务提供商 (kingbase.com.cn) 下载后双击打开或者用解压软件解压 我是直接装载iso镜像,双击安装程序 完成准备好,开始安装kstudio 点击确定 选择安装新实例 点击下…

kingscada连接mysql_KingSCADA初级教程 第八章 与数据库连接

第八章与数据库连接 本章内容 创建数据源及数据库 创建表格模板 创建记录体 对数据库的操作 概述 本章我们将讲解如何将阀门的状态变化记录到数据库中并进行查询。数据库我们选择Access数据库,记录的内容包括:日期、时间、阀门描述、阀门状态四个字段。我…

kingscada检测服务器状态,KingSCADA WEB发布总结

KingSCADA 工程开发完成后只能在1台服务器上运行,但是分布在不同地方的客户机要求能看到画面,在各个客户机安装软件和开发工程工作量比较大,这个时候就用kingscada的发布功能就可以轻松解决这个问题,在此,总结一下web发…

西门子S7-300PLC通过以太网连接组态王KingSCADA软件

西门子S7300PLC通过以太网连接组态王KingSCADA 组态王软件作为常用的上位机SCADA软件,常用于系统集成的上位软件应用方案,常与西门子PLC控制系统通过以太网进行通讯和数据记录。 1、 打开KingIOServer工程设计器; 2、 新建工程&…

数据结构——链式二叉树

🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C 🔥座右铭:“不要等到什么都没有了,才下…

鸿蒙开源oppo,华为鸿蒙开源,OPPO公关粗鄙言论将自己置于舆论风暴中

最近,社交媒体上的两张截图火了,截图之一称其它安卓厂商“明显不会”用鸿蒙,截图之二称“OPPO员工表示不上鸿蒙,并爆粗口”。 我们不确定这些看法基于怎样的讨论场景,又出自何人之口,但还是暴露两个现象&am…

OPPO开放平台上架APP

OPPO开放平台https://open.oppomobile.com/(需要软著) 管理中心 选择分发服务中软件&游戏 创建应用 填写APP资料 上传LOGO/应用截图/软著等,提交审核 审核过程非常快,不像小米/华为/魅族/ 比较慢;并且OPPO审核没…

oppo 升级 android 8.1,OPPO首发安卓8.1更新了什么

近日,OPPO基于Android 8.1开发的ColorOS开始公测,还忙着升级Android 8.0的时候,OPPO居然直接就搞定Android 8.1了,那么很多人好奇,OPPO首发安卓8.1更新了什么?本文为大家带来了OPPO升级安卓8.1更新内容介绍... OPPO R…

oppor15android版本8.1,OPPO R15体验:基于安卓8.1,ColorOS 5.0更好用

当目前智能手机硬件性能普遍过剩,越来越多的人们开始逐渐意识到,参数并不等于体验,反而是依附于硬件之上的操作系统很大程度上直接决定了一款智能手机的使用体验。 在当前智能手机市场,虽然说安卓系统占据了绝大部分市场份额&…

OPPO A37M刷机

OPPO A37m刷机步骤: 1、首先在电脑上,下载好OPPO A37m手机的官方线刷包:https://pan.baidu.com/s/1f-QFMIxuhASxjDuuF9RTqw 2、右击下载的刷机包,通过rar等压缩解压出来后,可以看到刷机包和教程文件。 3、先安装好&…

oppor15android版本8.1,OPPO R15搭载最新ColorOS 5.0系统,基于安卓8.1更好用

原标题:OPPO R15搭载最新ColorOS 5.0系统,基于安卓8.1更好用 手机的发展十分之快,硬件性能普遍过剩,而手机系统的更新迭代变得异常重要,而越来越多的消费者也意识到这个问题,想获得更好的使用体验&#xff…

oppo手机android功能,OPPO 手机抢先升级安卓8.1系统,新增AI快捷功能

原标题:OPPO 手机抢先升级安卓8.1系统,新增AI快捷功能 对于一部手机是否好,或许很多人都看工艺,拍照以及配置,其实手机系统也是非常关键的,目前使用最多的依旧还是安卓系统,不过现在已经升级到了…

oppo导出照片计算机找不到了,OPPO手机保存的图片找不到怎么办?

用OPPO手机在贴吧、空间或者其他软件看到漂亮的图片。保存下来,一看相册却不见了!!!其实只是被隐藏了,只要一步就能让他们出现。 方法一:取消隐藏 其实下载的图片都在相册里,只不过被隐藏了~ 只…

OPPO新版云测平台使用教程

远程真机入口 进入管理中心 按照下图导航点击“管理中心“,进入管理中心页面 进入云测服务页面 在管理中心点击“云测服务“,进入云测服务页面。 进入真机页面 在云测服务点击“远程真机-真机“进入远程真机页面 选择设备 找到设备 在设备列表中可…

android8OPPO,基于安卓8.1!OPPO R15深度体验:ColorOS 5.0焕然一新

当目前智能手机硬件性能普遍过剩,越来越多的人们开始逐渐意识到,参数并不等于体验,反而是依附于硬件之上的操作系统很大程度上直接决定了一款智能手机的使用体验。 在当前智能手机市场,虽然说安卓系统占据了绝大部分市场份额&…

oppoa83t怎么升级android8,OPPO A83t原版系统刷机包_OPPO A83t最新升级包更新下载

下面也是咱们的OPPO A83t手机专用的原版的系统刷机包了,之前也是有机友说自己的手机系统出问题最,想刷回官方原版的rom包,不过现在网上很多提供的是第三方的rom刷机包,并非是官方的rom包,所以下面特意整理了一个详细的…