必须了解的几种设计模式

前言

这里只说明各模型的关键原理,代码理解移步软件设计师下午题有深入理解,同步idea敲出来就差不多了。

2014-2021软设中级真题及答案链接

1.适配器模式——结构型模式

1)第一印象:适配器模式:将已有接口转换为希望的接口形式

2)适配器中的类

Adapter Pattern——适配器模式:将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作。别名为包装器(Wrapper),对象结构型模式。

Adapter——适配器类:适配器作为一个转换器,对Adaptee和Target进行适配。适配器类是适配器模式的核心。对象适配器中,通过集成Target并关联一个Adaptee对象,使二者产生联系

Adaptee——适配者类:作为被适配的对象,它定义一个已经存在的接口,这个接口需要适配。适配者类一般是一个具体的类,包含业务逻辑方法。

Target——目标抽象类:目标抽象类是用户所需要的接口。可以是一个抽象类或接口,也可以是具体类。

在这里插入图片描述

2016年上半年 适配器模式

2.桥接模式——结构型模式

1)第一印象:将对象的抽象和实现分离,达到可独立改变他们的目的

如果软件系统中某个类存在两个独立变化的维度,通过桥接模式可以将这两个维度分离出来,使两者可以独立扩展,更加符合“单一职责原则”。

2)桥接模式中的类

Abstraction——抽象类:用于定义抽象类的接口,它一般是抽象类而不是接口。其中定义了一个Implementor(实现类接口),并可以维护该对象,它与Implementor之间具有关联关系。抽象类既可以包含抽象业务方法(在Abstraction抽象类中),也可以包含具体业务方法(在Implementor实现类接口中)。

RefinedAbstraction——扩充抽象类:通常情况它是具体类而不是抽象类。它实现了在Abstraction中声明的抽象业务方法,也可以调用在Implementor中定义的业务方法。

在这里插入图片描述

2017下

2013下

3.观察者模式——行为型模式

1)第一印象:一对多依赖,分布通信

定义对象之间的一种一对多的依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象都得到通知并自动更新。别名:发布—订阅模式,模型—视图模式,源—监听器模式,从属者模式

2)观察者的类

Subject——目标:指被观察的对象。在目标中定义一个观察者集合,一个观察目标可以接受任意数量的观察者来观察,观察目标提供方法来增加和删除观察者对象,同时定义了通知方法notify()。观察目标类可以是接口,也可以是抽象类或具体类。

ConcreteSubject——具体目标:具体目标是目标类的子类。通常包含有经常发生改变的数据,当它的状态发生改变时,会向它的各个观察者发出通知。

Observer——观察者:观察者对观察目标的改变做出反应。一般被定义为接口,也叫抽象接口。接口声明了更新数据的方法update()。

ConcreteObserver——具体观察者:具体观察者中维护一个指向具体目标对象的引用。存储具体观察者 的有关状态,这些状态与具体目标的状态保持一致。实现了再抽象观察者中定义的update()方法。

在这里插入图片描述

2014上

2019下

4.生成器模式——创建型模式

1)第一印象:对象的构建和表示分离

讲一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。是一种创建型模式。

2)生成器的类

Builder——抽象建造者:抽象建造者可以是抽象类,也可以是接口。为创建一个产品Product对象指定抽象接口。

ConcreteBuilder——具体建造者:实现抽象建造者Builder声明的接口,实现各个部件的具体构造和装配方法(定制化建造),也可以返回创建好的复杂产品对象。

Product——产品:产品是被构建的复杂对象,包含多个组成部件。具体建造者创建该产品的内部表示并且定义它的装配过程。

Director——指挥者:也叫导演类,负责安排复杂对象的建造次序。指挥者Director与抽象建造者Builder之间存在关联关系,可以在其construct()建造方法中调用建造者对象的部件构造与装配方法,完成复杂对象的建造。客户端一般只需要与指挥者Director进行交互,在客户端确定具体建造者的类型,并实例化具体建造者对象。

在这里插入图片描述

2018上

2017上

5.访问者模式——行为型模式

1)第一印象:在不改变数据结构的前提下可以添加作用于这些元素的新的操作

提供一个作用于某对象结构中的各元素的操作表示,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。是一种行为型模式

2)访问者的类

Visit——抽象访问者:抽象访问者Visit 声明一个访问操作,这个操作是为对象结构中的每一个具体元素类ConcreteElement 声明的。从这个操作的名称或参数类型可以知道需要访问的具体元素的类型。

ConcreteVisitor——具体访问者:ConcreteVisitor 实现了每个由抽象访问者声明的操作,每一个操作都用于访问对象结构中一种类型的元素。

Element——抽象元素:一般作为接口或抽象类。定义accept() 方法。该方法通常以一个 Visitor 作为参数

ConcreteElement——具体元素:具体元素实现了accept() 方法,在 accept() 方法中调用访问者的访问方法来完成对一个元素的操作。

ObjectStructure——对象结构:对象结构是一个元素的集合,用作存放元素对象,并且提供遍历其内部元素的方法。可以结合组合模式来实现,也可以是一个简单的集合(eg:List、Set)对象

在这里插入图片描述

2015上

6.抽象工厂模式——创建型模式

1)第一印象:依赖对象接口

提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。抽象工厂模式又称Kit模式,是一种创建型模式。

2)抽象工厂的类

AbstractFactory——抽象工厂:声明一组用于创建一族产品的方法,每个方法对应一种产品。

ConcreteFactory——具体工厂:实现了在抽象工厂AbstractFactory中声明的创建产品的方法

AbstractProduct——抽象产品:为每种产品声明接口,在抽象产品中声明产品所具有的业务方法

ConcreteProduct——具体产品:定义具体工厂生产的具体产品对象,实现抽象产品接口中声明的业务方法

在这里插入图片描述

2012下

7.策略模式——行为型模式

1)第一印象:用算法策略封装

一系列的算法用算法封装起来,使其独立于使用它的客户而变化。也叫政策模式,是一种行为型模式

2)策略模式的类

Context——环境类:Context环境类是使用算法的角色,它在解决某个问题(即实现某个方法)时可以采取多种策略。定义所采用的的策略则在环境类中维持一个对抽象策略类Strategy的引用实例。

Strategy——抽象策略类:为所支持的算法声明了抽象方法,是所有策略类的父类。可以是抽象类、具体类或是接口。Context类通过Strategy类中声明的方法在运行时调用ConcreteStrategy类中实现的算法。

ConcreteStrategy——具体策略类:它实现了在Strategy类汇总声明的算法。

在这里插入图片描述

2019上

2015下

8.组合模式——结构性模式

1)第一印象:部分和整体的关系

用于把一组相似的对象当做一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。又叫部分整体模式,属于结构型模式。

2)组合模式中的类:

Component——抽象构件:可以是接口或者抽象类。包含所有子类共有行为的声明和实现,如增删获取子构件的方法

Leaf——叶子构件:它在组合结构中表示叶子节点对象,叶子节点没有子节点,它实现了抽象构件中定义的行为。

Composite——容器构件:表示容器节点对象,容器节点包。可以有子节点,子节点可以是叶子节点,也可以是容器节点。它会提供一个集合用于存储子节点,实现了在抽象构件中定义的行为,在其业务方法中递归调用其子节点的业务方法。

在这里插入图片描述

2009下

2010下

2011上

2021上

9.状态模式——行为型模式

1)允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。又叫状态对象,是一种行为型模式

2)状态模式的类:

Context——环境类:又叫上下文类,它是拥有多种状态的对象

State——抽象状态类:用于定义一个接口以封装与环境类的一个特定状态相关的行为。在State中声明了各种不同状态对应的方法,在其子类中实现这些方法。

ConcreteState——具体状态类:是抽象状态类的子类,每一个子类实现一个与环境类的一个状态相关的行为。

在这里插入图片描述

2018下

2011下

10.装饰模式——结构型模式

1)第一印象:动态地给一个对象增加额外的职责。为了解决类爆炸

动态地给一个对象增加额外的职责。就增加对象功能来说,装饰模式比生成子类实现更为灵活。是一种对象结构性模式。

2)装饰模式的类

Component——抽象构件:它是具体构件ConcreteComponent和抽象装饰类Decorator的共同父类。声明了具体构件中实现的业务方法,

ConcreteComponent——具体构件:是抽象构件类的子类,用于定义具体构件对象,实现了在抽象构件中声明的方法,装饰器可以给他增加额外的职责方法。

Decorator——抽象装饰类:是抽象构件类的子类,用于给具体构件增加职责,具体职责在其子类中实现

ConcreteDecorator——具体装饰类:是抽象装饰类Decorator的子类,负责向构件添加新的职责。可以调用在抽象装饰类中定义的方法,也可以增加新的方法用以扩充对象的行为。

在这里插入图片描述

2016下

2012上

11.原型模式——创建型模式

1)第一印象:拷贝原型实例对象

使用原型实例指定创建对象的种类,通过拷贝这些原型创建的新对象。是一种对象创建型模式,具有良好的可扩展性。

2)原型模式中的类

Prototype——抽象原型类:声明克隆方法的接口,是所有具体原型类的公共父类。可以是抽象类、接口或者具体实现类。

ConcretePrototye——具体原型类:实现在Prorotype类中声明的克隆方法,并返回自己的一个克隆对象。

Client——客户类:在Client只需要直接实例化或通过工厂方法等方式创建一个原型对象,在通过调用该对象的克隆方法即可得到多个相同的对象。

在这里插入图片描述

2013上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮皮怪鼠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值