结构型模式

合集下载

设计模式(1、创造型2、结构型、3行为型)

设计模式(1、创造型2、结构型、3行为型)

设计模式(1、创造型2、结构型、3⾏为型)
设计模式六⼤原则:单⼀职责、⾥⽒替换、依赖倒置、最⼩接⼝、迪⽶特、开闭
这些只能叫原则,叫建议,没有实际的招数
23种设计模式,就是具体的招数,他们可以分成三⼤类。

1、创造型2、结构型、3⾏为型。

创造型设计模式关注对象的创建。

就是咱们的new().单例模式、原型模式、⼯⼚⽅法、抽象⼯⼚、建造者模式
结构型设计模式关注类与类之间的关系。

继承或者组合。

说⽩了就是包⼀层。

适配器模式、代理模式、装饰器模式、外观模式、组合模式、桥接模式、享元模式
⾏为型设计模式关注对象和⾏为的分离。

流程⽤的多些,说⽩了就是把逻辑丢出去,具体逻辑上端⾃⼰实现,下端只做流程。

模板⽅法设计模式、观察者模式、责任链模式
23种设计模式是前辈们总结出来的。

是为了解决具体的⼀类问题总结出来的,我遇到好多⼩伙伴觉得设计模式很⽜逼。

其实没那么伟⼤。

某种设计模式解决⼀类问题也会带来另⼀种问题。

所以合理应⽤才是最好的。

所以,有些设计模式不是必须应⽤进去。

不必强求。

我也是后来者,对前辈们总结的⼀些理解,学习和应⽤。

希望也能帮到看到这⾥的求学者。

下⾯⼏章。

都是对这23种设计模式的解读,不过我是总结成三⼤类。

尽量⽤最普通的话去阐述。

结构型模式适配器模式

结构型模式适配器模式

.
19
• 对象适配器则:
– 允许一个Adapter与多个Adaptee-即Adaptee 本身以及它的所有子类同时工作。Adapter也可 以一次给所有的Adaptee添加功能。
– 使得重定义Adaptee的希望比较困难。这就需 要生成Adaptee的子类并且使得Adapter引用这 个子类而不是引用Adaptee本身。
// Wait for user
}
Console.ReadKe
16
Called SpecificRequest()
• 7。协作
– Client在Adapter实例上调用一些操作。接着 适配器调用Adaptee的操作实现这个请求。
.
17
• 客户使用适配器的过程:
– 客户通过目标接口调用适配器的方法对适配器 发出请求
• 因为可以在运行时刻改变对象组合关系, 所以对象组合方式具有更大的灵活性,而 这种机制用静态类组合是不可能实现的。
.
3
• 适配器模式(ADAPTER )-类对象结构型模式 • 组合模式(COMPOSITE )-对象结构型模式 • 装饰模式(DECORATOR )-对象结构型模式
.
4
• Adapter模式:适配器使得一个接口 (adaptee的接口)与其他接口兼容,从而 给出了多个不同接口的统一抽象。为此, 类适配器对一个adaptee类进行私有继承。 这样,适配器就可以用adaptee的接口标识 它的接口。
• 用一个具体的Adapter类对Adaptee和Target进行匹 配。结果是当我们想要匹配一个类以及所有它的子 类时,类Adapter将不能胜任工作。
• 使得Adapter可以重定义Adaptee的部分希望,因为 Adapter是Adaptee的一个子类。

设计模式——结构型模式(包含7种)

设计模式——结构型模式(包含7种)

设计模式——结构型模式(包含7种)结构型设计模式是从程序的结构上解决模块之间的耦合问题。

包括以下七种模式:1.Adapte适配器模式:Adapter模式通过类的继承或者对象的组合侧重于转换已有的接⼝,类适配器采⽤“多继承”的实现⽅式,带来了不良的⾼耦合,所以⼀般不推荐使⽤。

对象适配器采⽤“对象组合”的⽅式,更符合松耦合精神。

例如:笔记本电源适配器,可以将220v转化为适合笔记本使⽤的电压。

2.Bridge桥接模式:将抽象部分与实现部分分离,使它们都可以独⽴的变化。

减少因变化带来的代码的修改量。

例如:经典例⼦,电灯开关,开关的⽬的是将设备打开或关闭,产⽣的效果不同。

posite组合模式:将对象组合成树形结构以表⽰“部分-整体”的层次结构。

Composite模式使得客户对单个对象和组合对象的使⽤具有⼀致性。

从⽽解决了解决客户程序与复杂对象容器的解耦,即:通过继承统⼀的接⼝,我们可以将容器对象及其⼦对象看成同⼀类对象使⽤,以减少对象使⽤中的复杂度。

例如:让⽤户⼀致地使⽤单个对象和组合对象,1+2和(1+1)+(2*3)都是合法的表达式。

单个与整体都可以进⾏加法运算符的操作。

4.Decorator装饰模式:动态地给⼀个对象添加⼀些额外的职责。

就增加功能来说,Decorator模式相⽐⽣成⼦类更为灵活。

[GOF 《设计模式》]Decorator模式采⽤对象组合⽽⾮继承的⼿法,实现了在运⾏时动态的扩展对象功能的能⼒,⽽且可以根据需要扩展多个功能,避免了单独使⽤继承带来的“灵活性差”和“多⼦类衍⽣问题”。

同时它很好地符合⾯向对象设计原则中“优先使⽤对象组合⽽⾮继承”和“开放-封闭”原则。

例如:⼀幅画,可以直接挂到墙上,也可以加上框架和镶上玻璃后,再挂到墙上。

5.Facade外观模式:为⼦系统中的⼀组接⼝提供⼀个⼀致的界⾯,简化接⼝。

例如:我们拨打10086,可以办理,彩铃,⼿机报,全时通等业务(⼦对象),⽽10086则是为⼦对象所使⽤的⼀致界⾯。

设计模式主要分三个类型 创建型 结构型和行为型

设计模式主要分三个类型 创建型 结构型和行为型

设计模式主要分三个类型:创建型、结构型和行为型。

创建型有:一、Singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点二、二、Abstract Factory,抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。

三、三、Factory Method,工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到了子类。

四、四、Builder,建造模式:将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示。

五、五、Prototype,原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象。

行为型有:六、六、Iterator,迭代器模式:提供一个方法顺序访问一个聚合对象的各个元素,而又不需要暴露该对象的内部表示。

七、七、Observer,观察者模式:定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新。

八、八、Template Method,模板方法:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,TemplateMethod使得子类可以不改变一个算法的结构即可以重定义该算法得某些特定步骤。

九、九、Command,命令模式:将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队和记录请求日志,以及支持可撤销的操作。

十、十、State,状态模式:允许对象在其内部状态改变时改变他的行为。

对象看起来似乎改变了他的类。

十一、十一、Strategy,策略模式:定义一系列的算法,把他们一个个封装起来,并使他们可以互相替换,本模式使得算法可以独立于使用它们的客户。

十二、十二、China of Responsibility,职责链模式:使多个对象都有机会处理请求,从而避免请求的送发者和接收者之间的耦合关系十三、十三、Mediator,中介者模式:用一个中介对象封装一些列的对象交互。

软件设计模式之结构型模式

软件设计模式之结构型模式

适用场景
01
02
03
需要动态地添加或删除 功能的情况。
需要灵活地组合和复用 功能的情况。
需要对原有对象进行扩 展,但不希望修改原有
对象代码的情况。
实现方式
定义一个抽象组件接口,规定组件的基本功能。
输标02入题
定义一个具体组件类,实现抽象组件接口,提供具体 功能。
01
03
定义具体装饰器类,继承装饰器抽象类,并实现其方 法。在具体装饰器类中,可以调用被装饰对象的方法,
提高了系统的可扩展性和可复用性。
特点
分离抽象和实现,使它们可以独立变化 。
适用场景
1
当一个类需要同时访问多个接口时,且这些接口 之间存在继承关系。
2
当一个类需要同时访问多个接口,且这些接口之 间存在依赖关系时。
3
当一个类需要同时访问多个接口,且这些接口之 间存在关联关系时。
实现方式
创建抽象接口
定义抽象接口,用于规定具体类的行为。
05
02
桥接模式
将抽象与实现解耦,使它们可以独立变化。
04
装饰器模式
动态地给一个对象添加一些额外的职 责,就增加功能来说,装饰器模式相 比生成子类更为灵活。
06
享元模式
通过共享对象来显著减少系统中对象的数量, 从而显著提高系统性能。
02 适配器模式
定义与特点
01
02
定义:适配器模式是一 种结构型设计模式,它 通过将一个类的接口转 换成客户端所期望的另 一个接口,使得原本由 于接口不兼容而无法协 同工作的类能够一起工 作。
实现步骤
1. 定义抽象组件接口,包括在接口中声明需要 在组合中使用的操作。
2. 创建实现抽象组件接口的叶子节点类和复合 组件类。

体系结构模式

体系结构模式

体系结构模式介绍在软件开发中,体系结构模式是指为了实现某一特定系统或项目而构建的整体架构。

它包含了系统的组织结构、模块之间的关系、数据流和控制流等关键要素。

体系结构模式与设计模式不同,它强调的是系统整体的架构,而设计模式更关注单个模块或组件的设计。

体系结构模式是一种高级的设计模式,它提供了一种对系统进行划分、组织和管理的方法。

通过使用体系结构模式,可以使系统具有良好的可维护性、可扩展性、可重用性和可测试性,并且能够满足系统的性能、可靠性和安全性要求。

体系结构模式的分类体系结构模式可以分为三大类:结构型体系结构模式、行为型体系结构模式和并发型体系结构模式。

结构型体系结构模式结构型体系结构模式关注系统中不同模块或组件的结构以及它们之间的关系。

常见的结构型体系结构模式包括:1. 分层体系结构模式分层体系结构模式将系统分为不同的层次,每一层都负责处理特定的功能。

通常,每一层只与相邻的一层进行通信,使得系统更易于维护和扩展。

2. 客户端-服务器模式客户端-服务器模式将系统分为客户端和服务器两部分,客户端负责发送请求,服务器负责处理请求并返回响应。

这种模式常用于分布式系统和互联网应用中。

MVC模式是一种常用的软件架构模式,它将系统分为模型(Model)、视图(View)和控制器(Controller)三部分。

模型负责处理数据,视图负责展示数据,控制器负责接收用户的输入并进行相应的处理。

行为型体系结构模式行为型体系结构模式关注系统中不同模块或组件的行为以及它们之间的协作方式。

常见的行为型体系结构模式包括:1. 发布-订阅模式发布-订阅模式是一种消息通信模式,它包括发布者(Publisher)和订阅者(Subscriber)两个角色。

发布者负责发送消息,订阅者负责接收消息,并且发布者和订阅者之间并没有直接的依赖关系。

2. 中介者模式中介者模式是一种协调多个对象之间交互的模式。

它包括中介者(Mediator)和各个对象之间的同事对象(Colleague)。

结构型设计模式

结构型设计模式

1、适配器模式意图和适用性:定义:将一个类的接口转换成客户端所期望的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

适用性:以下情况使用A d a p t e r模式:●你想使用一个已经存在的类,而它的接口不符合你的需求。

●你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。

●(仅适用于对象A d a p t e r)你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。

对象适配器可以适配它的父类接口。

2、装饰者模式意图和适用性:定义:装饰模式可以动态的给一个对象附加一些功能,对于扩展功能来说,装饰模式(合成)比生成子类的方式(继承)更加灵活。

意图(Intent):动态地给一个对象增加一些额外的职责。

就增加功能而言,Decorator模式比生成子类更为灵活。

以下情况使用Decorator模式:●在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。

●当不能采用生成子类的方法进行扩充时。

一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。

另一种情况时因为类定义被隐藏,或类定义不能用于生成子类。

3、桥接模式的意图和适用性:定义:将问题的抽象和实现分离开来,通过用聚合代替继承来解决子类爆炸性增长的问题。

传统地,当一个抽象可能有多个实现时,通常用继承来协调它们。

抽象类定义该抽象的接口,而具体的子类则用不同的方式加以实现。

但是此方法有时不够灵活。

继承机制将抽象部分与它的实现部分固定在一起,使得难以对抽象部分和实现部分独立地进行修改。

扩充和重用。

●桥接模式的作用就是将抽象部分与实际部分分离,使它可以独立的变化。

4、享元模式的意图和适用性:意图(Intent):运用共享技术有效地支持大量细粒度的对象。

适用性:●一个应用程序使用了大量的对象。

●完全由于使用大量的对象,造成很大的存储开销。

结构型模式——精选推荐

结构型模式——精选推荐

结构型模式代理模式:由于某些原因需要给某对象提供⼀个代理以控制对该对象的访问。

这时,访问对象不适合或者不能直接引⽤⽬标对象,代理对象作为访问对象和⽬标对象之间的中介。

1. 模式的结构代理模式的主要⾓⾊如下。

1. 抽象主题(Subject)类:通过接⼝或抽象类声明真实主题和代理对象实现的业务⽅法。

2. 真实主题(Real Subject)类:实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引⽤的对象。

3. 代理(Proxy)类:提供了与真实主题相同的接⼝,其内部含有对真实主题的引⽤,它可以访问、控制或扩展真实主题的功能。

结构public class ProxyTest {public static void main(String[] args) {Proxy proxy = new Proxy();proxy.Request();}}//抽象主题interface Subject {void Request();}//真实主题class RealSubject implements Subject {public void Request() {System.out.println("访问真实主题⽅法...");}}//代理class Proxy implements Subject {private RealSubject realSubject;public void Request() {if (realSubject == null) {realSubject = new RealSubject();}preRequest();realSubject.Request();postRequest();}public void preRequest() {System.out.println("访问真实主题之前的预处理。

");}public void postRequest() {System.out.println("访问真实主题之后的后续处理。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实现要点
1.Adapter模式主要应用于“希望复用一些现存的类,但是接口 又与复用环境要求不一致的情况”,在遗留代码复用、类库迁移等 方面非常有用。 2.Adapter模式有对象适配器和类适配器两种形式的实现结构,但 是类适配器采用“多继承”的实现方式,带来了不良的高耦合,所 以一般不推荐使用。对象适配器采用“对象组合”的方式,更符合 松耦合精神。 3.Adapter模式的实现可以非常的灵活,不必拘泥于GOF23中定 义的两种结构。例如,完全可以将Adapter模式中的“现存对象” 作为新的接口方法参数,来达到适配的目的。 4.Adapter模式本身要求我们尽可能地使用“面向接口的编程”风 格,这样才能在后期很方便的适配。[以上几点引用自MSDN WebCast]
将一个类的接口转换成客户希望的另外 一个接口。Adapter模式使得原本由于接口 不兼容而不能一起工作的那些类可以一起工 作。 --《设计模式》GOF
结构图(Structure)
生活案例
扳手提供了一个适配器的例子。一个孔 套在棘齿上,棘齿的每个边的尺寸是相同的。 在美国典型的边长为1/2''和1/4''。显然, 如果不使用一个适配器的话,1/2''的棘齿不 能适合1/4''的孔。一个1/2''至1/4''的适配 器具有一个1/2''的阴槽来套上一个1/2''的 齿,同时有一个1/4的阳槽来卡入1/4''的扳 手。
代码演示(Code in .Net)
.NET中的应用
NET中的Adapter模式的应用就是DataAdapter。 为统一的数据访问提供了多个接口和基 类,其中最重要的接口之一是IdataAdapter。与 之相对应的DataAdpter是一个抽象类,它是 与具体数据库操作之间的数据适配器的 基类。DataAdpter起到了数据库到DataSet桥接 器的作用,使应用程序的数据操作统一到DataSet 上,而与具体的数据库类型无关。甚至可以针对特 殊的数据源编制自己的DataAdpter,从而使我们 的应用程序与这些特殊的数据源相兼容。注意这是 一个适配器的变体。
效果
1.需要扩展一个类的功能,或给一个类增加附 加责任。 2.需要动态地给一个对象增加功能,这些功能 可以再动态地撤销。 3.需要增加由一些基本功能的排列组合而产生 的非常大量的功能,从而使继承关系变得不 现实。
结构型模式总结
结构型模式,顾名思义讨论的是类和对象的结构,它采用继承机制来组合 接口或实现(类结构型模式),或者通过组合一些对象,从而实现新的功 能(对象结构型模式)。这些结构型模式,它们在某些方面具有很大的相 似性,仔细推敲,侧重点却各有不同。 Adapter模式通过类的继承或者对象的组合侧重于转换已有的接口; Bridge模式通过将抽象和实现相分离,让它们可以分别独立的变化,它 强调的是系统沿着多个方向的变化;Decorator模式采用对象组合而非继 承的手法,实现了在运行时动态的扩展对象功能的能力,它强调的是扩展 接口;Composite模式模糊了简单元素和复杂元素的概念,它强调的是 一种类层次式的结构;Façade 模式将复杂系统的内部子系统与客户程序 之间的依赖解耦,它侧重于简化接口,更多的是一种架构模式; Flyweight模式解决的是由于大量的细粒度对象所造成的内存开销的问题, 它与Façade模式恰好相反,关注的重点是细小的对象;Proxy模式为其 他对象提供一种代理以控制对这个对象的访问,它注重于增加间接层来简 化复杂的问题。
适配器模式(Adapter)
动机(Motivation) 在软件系统中,由于应用环境的变化, 常常需要将”一些现存的对象”放在新的环 境中应用,但是新环境要求的接口是这些现 存对象所不满足的。 如何应对这种”迁移的变化”?如何既能利 用现有对象的良好实现,同时又能满足新的 应用环境所要求的接口?
意图 (Intent)
Hale Waihona Puke 意图(Intent)动态地给一个对象添加一些额外的职责。 就增加功能来说,Decorator模式相比生成 子类更为灵活。[GOF 《设计模式》]
结构图(Structure)
代码演示(Code in .Net)
实现要点
1.Component类在Decorator模式中充当抽象接口的角色,不应该去实现 具体的行为。而且Decorator类对于Component类应该透明,换言之 Component类无需知道Decorator类,Decorator类是从外部来扩展 Component类的功能。 2.Decorator类在接口上表现为is-a Component的继承关系,即 Decorator类继承了Component类所具有的接口。但在实现上又表现为hasa Component的组合关系,即Decorator类又使用了另外一个Component 类。我们可以使用一个或者多个Decorator对象来“装饰”一个Component 对象,且装饰后的对象仍然是一个Component对象。 3.Decortor模式并非解决“多子类衍生的多继承”问题,Decorator模式的 应用要点在于解决“主体类在多个方向上的扩展功能”——是为“装饰”的含 义。 4.对于Decorator模式在实际中的运用可以很灵活。如果只有一个 ConcreteComponent类而没有抽象的Component类,那么Decorator类可 以是ConcreteComponent的一个子类。 5.Decorator模式的优点是提供了比继承更加灵活的扩展,通过使用不同的 具体装饰类以及这些装饰类的排列组合,可以创造出很多不同行为的组合。 6.由于使用装饰模式,可以比使用继承关系需要较少数目的类。使用较少的 类,当然使设计比较易于进行。但是,在另一方面,使用装饰模式会产生比使 用继承关系更多的对象。更多的对象会使得查错变得困难,特别是这些对象看 上去都很相像。
结构型模式
结构型模式概述
结构型模式,顾名思义讨论的是类和对 象的结构,它采用继承机制来组合接口或实 现(类结构型模式),或者通过组合一些对 象,从而实现新的功能(对象结构型模式)。
结构型模式
适配器模式(Adapter Pattern) 桥接模式(Bridge Pattern) 装饰模式(Decorator Pattern) 组合模式(Composite Pattern) 外观模式(Facade Pattern) 享元模式(Flyweight Pattern) 代理模式(Proxy Pattern)
装饰器模式(Decorator)
动机(Motivation)
在软件系统中,有时候我们会使用继承 来扩展对象的功能,但是由于继承为类型引 入的静态特质,使得这种扩展方式缺乏灵活 性;并且随着子类的增多(扩展功能的增 多),各种子类的组合(扩展功能的组合) 会导致更多子类的膨胀。如何使“对象功能 的扩展”能够根据需要来动态地实现?同时 避免“扩展功能的增多”带来的子类膨胀问 题?从而使得任何“功能扩展变化”所导致 的影响将为最低?
相关文档
最新文档