23种设计模式 - 结构型

Bridge模式

UML图:

解决的问题:bridge模式完成了抽象和实现部分的分离。两边变化互相不影响,提高了模块的内聚性。

原理:利用多态性,Abstraction类中包含AbstractionImp类的引用。

Adapter模式:

UML图

解决的问题:开发过程中有时会使用第三方库,但本身程序的接口已经设计好,且和第三方库是不兼容的。 此时可以利用适配器模式,从本身程序继承接口,并代理到第三方程序具体实现

原理: Adapter继承自接口Target类,并且Adapter中包含Adptee的指针对象。target的request()实际由Adaptee的SpecificRequest()实现。

注意:接口类(target)与第三方类(Adptee)具有不同的接口名称(request()和SpecificRequest())

Decorator模式:

UML图

解决的问题:开发中通常会发生要给已知的类天剑新功能,一般的做法是我们直接在原类的基础上派生子类,这种方式可能导致类的深度过大,导致程序的可读性降低。而装饰器模式可以很好的解决这个问题,我们不需要在为类一层一层的派生子类,而是通过实现不同的ConcreteDecorator子类来完成新功能的添加。

原理:ConcreteComponent(待装饰的类)和Decorator(装饰父类)都继承自component类并拥有同样的基准Operation(),Decorator类中包含有component对象的指针(指向ConcreteComponent)。 而ConcreteDecoratorlei类中的operation会首先调用基准对象的operation(),然后可以添加新的功能AddBehavior().

Composite模式

UML图

解决的问题: Composite模式很好地解决了将一个对象完成树状(或其他数据结构)形式的构建。

原理:Composite和Leaf均派生自接口Component, 在Composite类中完成Leaf对象的结构组织(例如树状,vector,list),Composite的operation类调用Leaf对象的operation完成具体对象的操作。

FlyWeight 模式

UML图

解决的问题:当程序要创建大量具有相同特征的“小对象”时,会造成内存的浪费。享元模式就是为了解决这个问题,在FlyWeight中包含有对象的缓存池,根据需要给client提供共享对象。

Facade模式

UML图

解决的问题:在开发中某一接口的实现可能分散在不同的类中,而该接口的使用者实际不需要了解实现的细节子类,此时可以通过Facade模式屏蔽具体的实现。

原理: Facade类中定义OperationWrapper方法,并包含具体实现类SubSystem1和SubSystem2的指针对象。在OperationWrapper()中调用Subsystem1和Subsystem2中的Operation()具体实现操作,从而屏蔽具体对象SubSystem1和SubSystem2.

Proxy模式

UML图

解决的问题:解决某些性能或者权限控制等问题时,可以将具体操作交给代理完成。(需进一步理解!!!)

时间: 2024-07-29 13:30:35

23种设计模式 - 结构型的相关文章

Java经典23种设计模式之结构型模式(二)

接上篇,本文介绍结构型模式里的组合模式.装饰模式.外观模式. 一.组合模式(Composite) 组合模式:将对象组合成树形结构,表示"部分--整体"的层次结构.最终达到单个对象和组合对象的使用具有一致性.单看这句话貌似有点抽象,其实比较简单. 以李云龙的独立团为例,目的要统计赵嘉宇一战共歼灭敌人多少个.最高的级别是团,一个团有若干个营,一个营有若干个排,一个排有若干个战士.(为了简化问题,排下面就不设行政单位了).很自然的,李云龙给营长开会回去给老子统计.营长回去给各个排长开会,赶紧

Java经典23种设计模式之结构型模式(三)------附代理模式、适配器模式、外观模式区别

本文介绍7种结构型模式里的剩下两种:享元模式.代理模式. 一.享元模式FlyWeight 享元模式比较简单且重要,在很多场合都被用到,只不过封装起来了用户看不到.其概念:运用共享内存技术最大限度的支持大量细粒度的对象.这个概念给的有些抽象,说白了就是如果内存中存在某个对象A,如果再次需要使用对象A的时候如果内存中有A这个对象就直接使用它,不要再次new了.如果没有,则重新new一个.基于这个特点,享元模式使用时一般会给待访问对象传递一个Tag,用来标识这个对象,而且要同时使用抽象工厂的方法进行访

Java经典23种设计模式之结构型模式(一)

结构型模式包括7种:适配器模式.桥接模式.组合模式.装饰模式.外观模式.享元模式.代理模式. 本文主要介绍适配器模式和桥接模式. 一.适配器模式(Adapter) 适配器模式其实很简单,就像手机充电器一样,手机需要5V的,而插座出来是220V.因此需要充电器变压就ok.再比如,一个之会说汉语的和一个只会说英语的无法沟通,那就中间请个翻译.所有的交流通过翻译,翻译翻给会说英语的,就能完成一次单项交流的.链接1 中的例子非常生动形象了.总结一下,无非就是有个通用的接口(称为Target),如果一切顺

23种设计模式介绍(二)---- 结构型模式

由于设计模式篇幅比较大,如果在一篇文章讲完所有的设计模式的话不利于阅读.于是我把它分为三篇文章 23种设计模式介绍(一)---- 创建型模式 23种设计模式介绍(二)---- 结构型模式 23种设计模式介绍(三)---- 行为型模式 设计模式都是比较抽象的概念,所以大家一定要确保看懂类图而后再自己写代码加强记忆. 概述 结构型模式共七种: 适配器模式(Adapter) 外观模式(Facade) 桥接模式(Bridge) 装饰器模式(Decorator) 代理模式(Proxy) 享元模式(Flyw

Java开发中的23种设计模式详解(转)

设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周

23种设计模式【转】

23种设计模式 目录 创建型 1. Factory Method(工厂方法) 2. Abstract Factory(抽象工厂) 3. Builder(建造者) 4. Prototype(原型) 5. Singleton(单例) 结构型 6. Adapter Class/Object(适配器) 7. Bridge(桥接) 8. Composite(组合) 9. Decorator(装饰) 10. Facade(外观) 11. Flyweight(享元) 12. Proxy(代理) 行为型 13.

0. Java开发中的23种设计模式详解(转)

设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周

23种设计模式全解析

一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 其实还有两类:并发型模式和线程池模式.用一个图片来整体描述一下: 二.设计模式的六大原则 总原则:开闭原则(Open C

c#中的23种设计模式

C# 23种设计模式汇总 创建型模式 工厂方法(Factory Method) 在工厂方法模式中,工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节.工厂方法模式的核心是一个抽象工厂类,各种具体工厂类通过抽象工厂类将工厂方法继承下来.如此使得客户可以只关心抽象产品和抽象工厂,完全不用理会返回的是哪一种具体产品,也不用关系它是如何被具体工厂创建的. 抽象工厂模式(Abstract Factory) 抽象工厂模式的主要优点是隔离了具体类的生成,使得客户不需要知道什么