您现在的位置是:主页 > news > 什么网站必须做三级等保/模板网站如何建站

什么网站必须做三级等保/模板网站如何建站

admin2025/5/1 2:08:00news

简介什么网站必须做三级等保,模板网站如何建站,哈尔滨h5建站模板,汕头网站制作找谁1、UML(统一建模语言,包括视图,图,模型元素和通用机制四部分,5种视图和13个图) 2、类与类图 (1)类的属性即类的数据职责,类的操作即类的行为职责 (2&#xf…

什么网站必须做三级等保,模板网站如何建站,哈尔滨h5建站模板,汕头网站制作找谁1、UML(统一建模语言,包括视图,图,模型元素和通用机制四部分,5种视图和13个图) 2、类与类图 (1)类的属性即类的数据职责,类的操作即类的行为职责 (2&#xf…

1、UML(统一建模语言,包括视图,图,模型元素和通用机制四部分,5种视图和13个图)

2、类与类图
(1)类的属性即类的数据职责,类的操作即类的行为职责
(2)类图(Class Diagram)使用出现在系统中的不同类来描述系统的静态结构,它用来描述不同的类以及它们之间的关系
(3)在UML类图中,类一般由三部分组成:类名,属性和类的操作
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(PS:可见性:公有(+);私有(-);受保护(#)。为了保证数据的封装性,属性的可见性一般为private,通过公有的Getter和Setter方法供外界使用。参数个数是任意的,多个参数之间用“逗号”隔开。如果是构造方法,则无返回类型。)

3、类之间的关系(注意各种关系之间的符号表示)(关联关系全是实线,依赖关系是虚线
(1)关联关系:
1)双向关联(直线
在这里插入图片描述

2)单向关联(带箭头的实线
在这里插入图片描述

3)自关联
在这里插入图片描述

4)多重性关联
在这里插入图片描述
在这里插入图片描述

5)聚合关系(聚合(Aggregation)关系表示整体与部分的关系;在聚合关系中,成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在;带空心菱形的直线表示
在这里插入图片描述

6)组合关系(组合(Composition)关系也表示类之间整体和部分的关系,但是在组合关系中整体对象可以控制成员对象的生命周期,一旦整体对象不存在,成员对象也将不存在;带实心菱形的直线表示
在这里插入图片描述

(PS:聚合关系表示整体与部分关系比较弱,而组合关系较强;聚合关系通过对象注入方式实现,而组合关系通过在整体类的构造函数中实例化成员类来实现,共同点是一个类的实例为另一个类的成员对象
(2)依赖关系(某个类的方法使用另一个类的对象作为参数;用带箭头的虚线表示。由依赖的一方指向被依赖的一方
在这里插入图片描述

(3)泛化关系(即继承关系,描述父类与子类之间的关系;用带空心三角形的直线来表示;在Java语言中使用extends关键字、在C++/C#中使用冒号“:”来实现)
在这里插入图片描述

(4)接口与实现关系(接口之间也可以有与类之间关系类似的继承关系和依赖关系;接口和类之间存在一种实现(Realization)关系,在这种关系中,类实现了接口,类中的操作实现了接口中声明的操作;用带空心三角形的虚线来表示;在Java语言中使用implements关键字、在C++/C#中使用冒号“:”来实现)
在这里插入图片描述

4、顺序图是一种强调对象间消息传递次序的交互图,又称为时序图或序列图。

5、状态图用来描述一个特定对象的所有可能状态及引起其状态转移的事件。

6、对于面向对象的软件系统设计来说,在支持可维护性的同时提高系统的可复用性是一个核心问题,面向对象设计原则正是为解决这个问题而诞生的。 面向对象设计原则为支持可维护性复用而诞生,属于指导性原则,非强制性原则(7个,原则并不是孤立存在的,它们相互依赖、相互补充

7、重点原则:(七大面向对象设计原则)
(1)单一职责原则(最简单的面向对象设计原则)
一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中(将不同的变化原因封装在不同的类中,单一职责原则是实现高内聚、低耦合的指导方针)

(2)开闭原则(里氏代换原则,依赖倒转原则等原则都是开闭原则的实现方法)
软件实体应当对扩展开放,对修改关闭。(开闭原则是面向对象的可复用设计的第一块基石;开闭原则是指软件实体应尽量在不修改原有代码的情况下进行扩展;抽象化是开闭原则的关键;)

(3)里氏代换原则
所有引用基类(父类)的地方必须能透明地使用其子类的对象。(在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不一定成立;在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型)

(4)依赖倒转原则
高层模块不应该依赖低层模块,它们都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象。(要针对接口编程,不要针对实现编程;在程序代码中传递参数时或在关联关系中,尽量引用层次高的抽象层类;在代码中使用抽象类,而将具体类写在配置文件中;针对抽象层编程,将具体类的对象通过依赖注入(Dependency Injection, DI)的方式注入到其他对象)

8、设计模式
(1)定义:设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结
(2)目的:使用设计模式是为了可重用代码、让代码更容易被他人理解、提高代码的可靠性
(3)设计模式的关键要素包括四个方面:
1)模式名称
2)问题
3)解决方案
4)效果

9、设计模式的分类
根据目的分为(模式是用来做什么的)创建型(Creational),结构型(Structural)和行为型(Behavioral)三类:

创建型模式主要用于创建对象(5种)
结构型模式主要用于处理类或对象的组合(7种)
行为型模式主要用于描述类或对象如何交互和怎样分配职责(11种)
(GoF一共描述了23种设计模式)
在这里插入图片描述

10、抽象工厂模式(所有形式的工厂模式中最为抽象和最具一般性的一种形态)

(模式动机:
在这里插入图片描述


(1)产品等级结构和产品族
1)产品等级结构:产品等级结构即产品的继承结构(简单理解为不同工厂生产的同一个类型产品(比如海尔和海信生产的空调就是一个产品等级结构))
2)产品族:在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品(比如海尔生产的空调和冰箱就是一个产品族)
(PS:抽象工厂模式是对一个工厂生产各种产品的抽象,而工厂方法模式是每一个具体类型的产品(抽象工厂模式比工厂方法模式减少了系统中的类的个数))

抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式则需要面对多个产品等级结构

(2)定义:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类,属于对象创建型模式

(3)抽象工厂模式包含如下角色
抽象工厂/具体工厂/抽象产品/具体产品

(4)抽象工厂模式的实例
(电器工厂)
一个电器工厂可以产生多种类型的电器,如海尔工厂可以生产海尔电视机、海尔空调等,TCL工厂可以生产TCL电视机、TCL空调等,相同品牌的电器构成一个产品族,而相同类型的电器构成了一个产品等级结构,现使用抽象工厂模式模拟该场景。
在这里插入图片描述

(5)抽象工厂模式的优缺点
1)优点:
隔离了具体类的生成,使得客户端并不需要知道什么被创建
当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象
增加新的产品族很方便,无须修改已有系统,符合开闭原则

2)缺点:
增加新的产品等级结构麻烦,需要对原有系统进行较大的修改,甚至需要修改抽象层代码,这显然会带来较大的不便,违背了开闭原则(对“开闭原则”的支持呈现倾斜性)

11、原型模式
(1)原型模式是一种对象创建型模式,用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象
(模式动机:孙悟空拔毛变小猴,复制粘贴操作等等)

(2)原型模式包含如下角色:抽象原型类/具体原型类/客户类
(所有的Java类都继承自java.lang.Object,而Object类提供一个clone()方法,可以将一个Java对象复制一份;在Java中可以直接使用Object提供的clone()方法来实现对象的克隆(浅克隆))

原型模式包含如下角色:
Prototype:抽象原型类
ConcretePrototype:具体原型类
Client:客户类
在这里插入图片描述

(3)原型模式分为两种形式:深克隆和浅克隆
1)浅克隆
当原型对象被复制时,只复制它本身和其中包含的值类型的成员变量,而引用类型的成员变量并没有复制。
2)深克隆
除了对象本身被复制外,对象所包含的所有成员变量也将被复制。

(4)原型模式优缺点
1)优点:
简化对象的创建过程,通过复制一个已有实例可以提高新实例的创建效率
扩展性较好
简化创建结构,原型模式中产品的复制是通过封装在原型类中的克隆方法实现的,无须专门的工厂类来创建产品
可以使用深克隆的方式保存对象的状态,以便在需要的时候使用,可辅助实现撤销操作

2)缺点:
需要为每一个类配备一个克隆方法,而且该克隆方法位于一个类的内部,当对已有的类进行改造时,需要修改源代码,违背了开闭原则
在实现深克隆时需要编写较为复杂的代码,而且当对象之间存在多重的嵌套引用时,为了实现深克隆,每一层对象对应的类都必须支持深克隆,实现起来可能会比较麻烦

12、单例模式(单例模式所有设计模式中结构最简单的模式,它只包含一个类–单例类;建造者模式是最复杂的创建型模式;模板方法模式是结构最简单的行为型模式;)
(1)单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法,是一种对象创建型模式

(模式动机:任务管理只能打开一个)
在这里插入图片描述

(2)模式结构
在这里插入图片描述

(单例模式中只包含一个Singleton(单例角色类):在单例类的内部实现只生成一个实例,同时它提供一个静态的getInstance()的工厂方法,让客户可以使用它的唯一实例;为了防止在外部对其实例化,将其构造函数设计为私有;在单例类内部定义一个Singleton类型的静态对象,作为共享的唯一实例)(即单例模式包含一个私有构造函数,一个静态私有成员变量和一个静态公有工厂方法)
(3)单例模式包含如下角色:Singleton:单例类
(4)在单例模式的实现过程中,需要注意以下三点:
1)单例类的构造函数为私有
2)提供一个自身的静态私有成员变量
3)提供一个公有的静态工厂方法

(5)单例模式的优缺点
1)优点:
提供了对唯一实例的受控访问
可以节约系统资源,提高系统的性能
允许可变数目的实例(多例类)

2)缺点:
扩展困难(缺少抽象层)
单例类的职责过重(在一定程序上违背了单一职责原则)
由于自动垃圾回收机制,可能会导致共享的单例对象的状态丢失

(6)8种单例模式实现方式
饿汉式2种/懒汉式4种/静态内部类1种/枚举1种

饿汉式单例类与懒汉式单例类的比较
饿汉式单例类:无须考虑多个线程同时访问的问题;调用速度和反应时间优于懒汉式单例类;资源利用效率不及懒汉式单例;系统加载时间可能会比较长。

懒汉式单例类:实现了延迟加载;必须处理好多个线程同时访问的问题;需通过双重检查锁定等机制进行控制,将导致系统性能受到一定影响。
(饿汉式单例类和懒汉式单例类的构造函数都是私有的;与饿汉式单例类不同的是,懒汉式单例类在第一次被引用时将自己实例化,在懒汉式单例类被加载时不会将自己实例化)

13、组合模式
(1)模式动机(树形结构)
文件夹 容器(Container)
文件 叶子(Leaf)

如何将容器对象和叶子对象进行递归组合,使得用户在使用时无须对它们进行区分,可以一致地对待容器对象和叶子对象?(组合模式)

(2)组合模式(Composite Pattern):组合多个对象形成树形结构以表示“部分-整体”的结构层次。组合模式对单个对象(即叶子对象)组合对象(即容器对象)的使用具有一致性,属于对象结构型模式,将对象组织到树形结构中,可以用来描述整体与部分的关系。

(3)组合模式包含如下角色
Component: 抽象构件
Leaf: 叶子构件(叶子构件在组合结构中表示叶子节点对象,叶子节点没有子节点)
Composite: 容器构件(容器构件在组合结构中表示容器节点对象,容器节点包含子节点,其子节点可以是叶子节点也可以是容器节点)
Client:客户类
在这里插入图片描述

(抽象类既是叶子类的父亲,也是容器类的父亲)

(4)组合模式的优缺点
1)优点:
可以清楚地定义分层次的复杂对象,表示对象的全部或部分层次,让客户端忽略了层次的差异,方便对整个层次结构进行控制
客户端可以一致地使用一个组合结构或其中单个对象,不必关心处理的是单个对象还是整个组合结构,简化了客户端代码
增加新的容器构件和叶子构件都很方便,符合开闭原则
为树形结构的面向对象实现提供了一种灵活的解决方案

2)缺点:
在增加新构件时很难对容器中的构件类型进行限制

(5)组合模式根据抽象构件类的定义形式,又可以分为透明组合模式和安全组合模式。(简单理解为透明组合模式的抽象类中定义了所有方法,叶子类和容器类继承;安全组合模式的抽象类没有定义方法,将方法定义在容器类中,叶子类没有即无法使用)

14、命令模式(处理对象间的调用关系)
(1)模式动机
开关 请求发送者
电灯 请求的最终接收者和处理者

命令模式可以对发送者和接收者完全解耦,发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求。

(2)命令模式(Command Pattern):将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作,属于对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式

(3)命令模式包含如下角色:
Command: 抽象命令类(声明了用于执行请求的execute()等方法)
ConcreteCommand: 具体命令类
Invoker: 调用者
Receiver: 接收者
Client:客户类
在这里插入图片描述

(命令模式的本质是对请求(命令)进行封装
一个请求对应于一个命令,将发出命令的责任和执行命令的责任分开
每个命令都是一个操作:请求的一方发出请求,要求执行一个操作;接收的一方收到请求,并执行操作)

(4)命令模式的优缺点
1)优点:
降低系统的耦合度
新的命令可以很容易地加入到系统中,符合开闭原则
可以比较容易地设计一个命令队列或宏命令(组合命令)
为请求的撤销(Undo)和恢复(Redo)操作提供了一种设计和实现方案

2)缺点:
使用命令模式可能会导致某些系统有过多的具体命令类(针对每一个对请求接收者的调用操作都需要设计一个具体命令类)

15、迭代器模式
(1)模式动机
电视机 存储电视频道的集合 聚合类(Aggregate Classes)
电视机遥控器 操作电视频道 迭代器(Iterator)

怎么遍历一个聚合对象,又不需要了解聚合对象的内部结构,还能提供多种不同的遍历方式(迭代器模式)

(2)迭代器模式(Iterator Pattern) :提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示。属于对象行为模式,别名为游标。

(3)迭代器模式包含如下角色:
Iterator: 抽象迭代器
ConcreteIterator: 具体迭代器
Aggregate: 抽象聚合类
ConcreteAggregate: 具体聚合类
在这里插入图片描述

(聚合对象的两个职责:存储内部数据,聚合对象的基本职责;遍历内部数据,既是可变化的,又是可分离的
迭代器模式是“单一职责原则”的完美体现
迭代器模式的本质:将遍历聚合对象中数据的行为提取出来,封装到一个迭代器中,通过专门的迭代器来遍历聚合对象的内部数据)

(4)迭代器模式优缺点
1)优点:
支持以不同的方式遍历一个聚合对象,在同一个聚合对象上可以定义多种遍历方式
简化了聚合类
由于引入了抽象层,增加新的聚合类和迭代器类都很方便,无须修改原有代码,符合开闭原则

2)缺点:
在增加新的聚合类时需要对应地增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性
抽象迭代器的设计难度较大,需要充分考虑到系统将来的扩展。在自定义迭代器时,创建一个考虑全面的抽象迭代器并不是一件很容易的事情

16、观察者模式
(1)模式动机
建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应。在此,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系,可以根据需要增加和删除观察者,使得系统更易于扩展。(红绿灯通行,股票波动和股民的反应等等)

(2)观察者模式(Observer Pattern):定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。属于对象行为型模式。
别名:发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式
(MVC模式中的模型就是观察目标,视图就是观察者,控制器充当两者之间的中介者,即MVC模式中蕴含了观察者模式和中介者模式)

(3)观察者模式包含如下角色:
Subject: 目标
ConcreteSubject: 具体目标
Observer: 观察者
ConcreteObserver: 具体观察者
在这里插入图片描述

(4)观察者模式实例
假设猫是老鼠和狗的观察目标,老鼠和狗是观察者,猫叫老鼠跑,狗也跟着叫,使用观察者模式描述该过程。
在这里插入图片描述

(5)观察者模式优缺点
1)优点:
可以实现表示层和数据逻辑层的分离
在观察目标和观察者之间建立一个抽象的耦合
支持广播通信,简化了一对多系统设计的难度
符合开闭原则,增加新的具体观察者无须修改原有系统代码,在具体观察者与观察目标之间不存在关联关系的情况下,增加新的观察目标也很方便

2)缺点:
将所有的观察者都通知到会花费很多时间
如果存在循环依赖时可能导致系统崩溃
没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而只是知道观察目标发生了变化

17、其他面向对象设计原则(三个)
(1)接口隔离原则
客户端不应该依赖那些它不需要的接口。
在这里插入图片描述
(2)合成复用原则
优先使用对象组合,而不是继承来达到复用的目的(为了降低系统类中之间的耦合,该原则提倡复用时要尽量使用组合/聚合关系(关联关系),少用继承关系)
(3)迪米特法则(最少知识法则)
每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。(迪米特法则要求一个软件实体应当尽可能少地与其他实体发生相互作用,主要用途是控制信息的过载)

18、简单工厂模式(不属于GoF 23种设计模式)
(1)又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式
在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父亲。

(2)简单工厂模式包含如下角色:
Factory:工厂角色(核心为工厂类)
Product:抽象产品角色
ConcreteProduct:具体产品角色
在这里插入图片描述

(3)简单工厂模式的优缺点
在这里插入图片描述
在这里插入图片描述

19、工厂方法模式(简单工厂模式的延伸)
(1)简称工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式

在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。

(2)工厂方法模式包含如下角色:
Product:抽象产品
ConcreteProduct:具体产品
Factory:抽象工厂
ConcreteFactory:具体工厂
在这里插入图片描述

(3)工厂方法模式的优缺点

在这里插入图片描述
在这里插入图片描述

20、建造者模式(最为复杂的创建型模式)
(1)将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造者模式属于对象创建型模式
(一辆车是由方向盘,轮胎,发动机等等组成,只能能开就行不需要管它怎么组装的)

(2)建造者模式包含如下角色:
Builder:抽象建造者
ConcreteBuilder:具体建造者
Director:指挥者
Product:产品角色
在这里插入图片描述

(3)建造者模式优缺点
1)优点:
在这里插入图片描述

2)缺点:
在这里插入图片描述

21、适配器模式
(1)适配器模式(Adapter Pattern) :将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作

适配器模式既可以作为类结构型模式,也可以作为对象结构型模式
(电源适配器等等)

(2)适配器模式包含如下角色:
Target:目标抽象类
Adapter:适配器类
Adaptee:适配者类
在这里插入图片描述

(3)适配器模式优缺点
1)优点:
在这里插入图片描述

2)缺点:
在这里插入图片描述

22、桥接模式
(1)桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化,属于对象结构型模式,用抽象关联取代了传统的多层继承,将类之间的静态继承关系转换为动态的对象组合关系,降低了类与类之间的耦合有效控制了系统中类的个数。
(将图形与颜色分开进行任意组合减少类的个数)

(2)桥接模式包含如下角色:
Abstraction:抽象类
RefinedAbstraction:扩充抽象类(相当于具体抽象类)
Implementor:实现类接口
ConcreteImplementor:具体实现类类
在这里插入图片描述

(3)桥接模式的优缺点
1)优点:
在这里插入图片描述

2)缺点:
在这里插入图片描述

7、装饰模式
(1)模式动机
可以在不改变一个对象本身功能的基础上给对象增加额外的新行为。它通过一种无须定义子类的方式给对象动态增加职责,使用对象之间的关联关系取代类之间的继承关系(与桥接模式相同)。引入了装饰类,在装饰类中既可以调用待装饰的原有类的方法,还可以增加新的方法,以扩展原有类的功能。
(给一张照片加不同形状的相框等等)

(2)装饰模式(Decorator Pattern) :动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活,属于对象结构型模式,
以对客户透明的方式动态地给一个对象附加上更多的责任可以在不需要创建更多子类的情况下,让对象的功能得以扩展

(3)装饰模式包含如下角色:
Component: 抽象构件类
ConcreteComponent: 具体构件类
Decorator: 抽象装饰类
ConcreteDecorator: 具体装饰类

在这里插入图片描述

(4)装饰模式优缺点
1)优点:
在这里插入图片描述

2)缺点:
在这里插入图片描述

24、外观模式
(1)模式动机
一个客户类需要和多个业务类交互,为多个业务类的调用提供了一个统一的入口,简化了类与类之间的交互,引入外观类降低系统的耦合度。
(网站首页作整个网站的入口,里面有各个栏目的链接等等)

(2)外观模式(Facade Pattern):外部与子系统的通信通过一个统一的外观对象进行,为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得子系统更加容易使用;外观模式又称为门面模式,它是一种对象结构型模式。

(3)外观模式包含如下角色:
Facade: 外观角色
SubSystem:子系统角色
在这里插入图片描述

(4)外观模式的优缺点
1)优点:
在这里插入图片描述

2)缺点:
在这里插入图片描述

25、享元模式
(1)模式动机
如何避免系统中出现大量相同或相似的对象,同时又不影响客户端程序通过面向对象的方式对这些对象进行操作呢(享元模式)
享元模式:通过共享技术实现相同或相似对象的重用
享元池(Flyweight Pool):存储共享实例对象的地方

(2)享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度对象的复用。由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻量级模式,它是一种对象结构型模式。

(3)享元模式包含如下角色:
Flyweight: 抽象享元类
ConcreteFlyweight: 具体享元类
UnsharedConcreteFlyweight: 非共享具体享元类
FlyweightFactory: 享元工厂类
在这里插入图片描述

(4)享元模式优缺点
1)优点:
在这里插入图片描述

2)缺点:
在这里插入图片描述

26、代理模式
(1)模式动机
通过引入一个新的对象(如小图片和远程代理对象)来实现对真实对象的操作,或者将新的对象作为真实对象的一个替身
引入代理对象来间接访问一个对象(代理模式)
(婚姻中介所,房屋中介等等)

(2)代理模式(Proxy Pattern) :给某一个对象提供一个代理,并由代理对象控制对原对象的引用,属于对象结构模型,代理对象可以在客户端和目标对象之间起到中介的作用,通过代理对象去掉客户不能看到的内容和服务或者添加客户需要的额外的新服务。

(3)代理模式包含如下角色:
Subject: 抽象主题角色
Proxy: 代理主题角色
RealSubject: 真实主题角色
在这里插入图片描述

(4)代理模式优缺点
1)优点:
在这里插入图片描述

2)缺点:

在这里插入图片描述

27、职责链模式
(1)职责链模式(Chain of Responsibility Pattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求。将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。属于对象行为型模型

职责链可以是一条直线、一个环或者一个树形结构,最常见的职责链是直线型,即沿着一条单向的链来传递请求。
(校奖学金的审批流程)

(2)职责链模式包含如下角色:
Handler: 抽象处理者
ConcreteHandler: 具体处理者
Client:客户类
在这里插入图片描述

(将请求的处理者组织成一条链,并让请求沿着链传递,由链上的处理者对请求进行相应的处理
客户端无须关心请求的处理细节以及请求的传递,只需将请求发送到链上,将请求的发送者和请求的处理者解耦

(3)职责链模式优缺点
1)优点:
在这里插入图片描述

2)缺点:
在这里插入图片描述

28、解释器模式
(1)解释器模式(Interpreter Pattern) :定义一个语言的文法,并且建立一个解释器来解释该语言中的句子。属于类行为型模式。
主要应用于使用面向对象语言开发的编译器和解释器设计。

29、中介者模式
(1)中介者模式(Mediator Pattern)定义:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式。(吵架时的调停者,联合国等等)

(2)中介者模式包含如下角色:
Mediator: 抽象中介者
ConcreteMediator: 具体中介者
Colleague: 抽象同事类
ConcreteColleague: 具体同事类
在这里插入图片描述

(在中介者模式中,通过引入中介者来简化对象之间的复杂交互
中介者模式是迪米特法则的一个典型应用
对象之间多对多的复杂关系转化为相对简单的一对多关系
中介者类的职责:中转作用(结构性)和协调作用(行为性))

(2)中介者模式的优缺点
在这里插入图片描述
在这里插入图片描述

30、备忘录模式
(1)模式动机
通过使用备忘录模式可以让系统恢复到某一特定的历史状态。首先保存软件系统的历史状态,当用户需要取消错误操作并且返回到某个历史状态时,可以取出事先保存的历史状态来覆盖当前状态。(“后悔药”,撤销操作等等)

(2)备忘录模式(Memento Pattern):在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。是一种对象行为型模式,其别名为Token。

(3)备忘录模式包含如下角色:
Originator: 原发器
Memento: 备忘录
Caretaker: 负责人
在这里插入图片描述

(4)备忘录模式优缺点
1)优点:
在这里插入图片描述

2)缺点:

在这里插入图片描述

31、状态模式
(1)模式动机
在软件系统中:有些对象具有多种状态/这些状态在某些情况下能够相互转换/对象在不同的状态下将具有不同的行为(人有多种情绪,每天经历各种情绪会做出不同的举止表现等等)

(2)状态模式(State Pattern) :允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Objects for States),状态模式是一种对象行为型模式

(3)状态模式包含如下角色:
Context: 环境类
State: 抽象状态类
ConcreteState: 具体状态类
在这里插入图片描述

(4)状态模式优缺点
1)优点:
在这里插入图片描述

2)缺点:
在这里插入图片描述

16、策略模式(用于算法的自由切换和扩展)
(1)模式动机
实现某个目标的途径不止一条,可根据实际情况选择一条合适的途径。可以定义一些独立的类来封装不同的算法,每一个类封装一种具体的算法—策略类—策略模式。(人们出行可以坐火车,飞机,船等等,根据自身实际情况选择等等)

(2)策略模式(Strategy Pattern):定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化,是一种对象行为型模式。

(3)策略模式包含如下角色:
Context: 环境类
Strategy: 抽象策略类
ConcreteStrategy: 具体策略类
在这里插入图片描述

(和上一个的状态模式结构图基本一样)

(4)策略模式优缺点
1)优点:
在这里插入图片描述

2)缺点:

在这里插入图片描述

17、模板方法模式
(1)模式动机
模板方法模式:
基本方法(“点单”、“吃东西”和“买单”)
模板方法( “请客”)
(不管请客吃什么,请客的次序是固定的,只是吃的东西根据实际情况而定)

(2)模板方法模式(Template Method Pattern):定义一个操作中算法的框架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤;模板方法是一种类行为型模式。是一种基于继承的代码复用技术。

(3)模板方法模式包含如下角色:
AbstractClass: 抽象类
ConcreteClass: 具体子类
在这里插入图片描述

(其结构中只存在父类和子类的继承关系)

(4)模板方法:将基本方法汇总起来等待方法
基本方法:实现具体逻辑步骤的方法
1)抽象方法(Abstract Method):abstract
2)具体方法(Concrete Method)
3)钩子方法(Hook Method)
“挂钩”方法: isXXX()或hasXXX(),返回类型为boolean类型
空方法

(5)模板方法模式优缺点
1)优点:
在这里插入图片描述

2)缺点:
在这里插入图片描述