结构型模式总结

目录

  • 目录
  • 适配器模式
    • 适配器模式Adapter
    • UML图
    • 自己的理解
  • 装饰模式
    • 装饰模式Decorator
    • UML图
    • 自己的理解
  • 桥接模式
    • 桥接模式Bridge
    • UML图
    • 自己的理解
  • 组合模式
    • 组合模式Composite
    • UML图
    • 自己的理解
  • 享元模式
    • 享元模式Flyweight
    • UML图
    • 自己的理解
  • 代理模式
    • 代理模式Proxy
    • UML图
    • 自己的理解
  • 外观模式
    • 外观模式Facade
    • UML图
    • 自己的理解
  • 总结

适配器模式

适配器模式(Adapter)

将一个类的接口装换成客户希望的另外一个接口。Adapter模式喜得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

UML图

结构型模式总结_第1张图片

自己的理解

什么时候用:当系统的数据和行为都正确或想复用一些现存的类,但接口不相符时使用。比如变压器,有一个电压500幅但是现在又一台机器值需要220幅,所以想用这个电压又不能直接插,就出现了适配器。

过程:以姚明大篮球需要中文翻译为例,让翻译像其他外国运动员一样继承运动运抽象类,也具有Attack()和defense()的功能,但不是在Attack()中写姚明攻击啊,而是把Attack翻译成攻击,从而调用姚明能听的懂得中文方法——攻击()

装饰模式

装饰模式(Decorator)

动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。

UML图

结构型模式总结_第2张图片

自己的理解

装饰模式就是一层层的裹好在一层层脱掉。以穿衣服为例子,服装抽象类有一个打扮的功能,人和服装抽象类和其他具体服装类都有展示的功能,打扮功能的参数是人,先把人扔进去袜子里,再把穿袜子的人扔到裤子里,再把穿了袜子和裤子的人扔到鞋里,这样一层层的就给一个人穿好了。

最后就是见证奇迹的时刻了,一层层的再脱下来,把这个穿好衣服的人拉去展示,先是最外层的鞋子展示“啊,他穿了鞋子”,继之,裤子“啊,他穿了裤子诶”… 这样想让他穿什么就一开始打扮时用什么就OK了,这是灵活性,再有就是扩展性,要是想增加功能,裤子外面再穿条裙子,就给已穿好裤子的人再穿条裙子就好了。

桥接模式

桥接模式(Bridge)

将抽象部分与它的实现部分分离,使他们都可以独立地变化。

UML图

结构型模式总结_第3张图片

自己的理解

这个模式中用到了合成/聚合复用原则,即尽量使用合成/聚合,尽量不要使用继承。在手机品牌和手机软件的这个例子中,如果把手机品牌作为一个抽象类,每个品牌下都有好多手机软件,如通讯录,记事本等,这样增加新的品牌,它下面的软件都要加一遍,增加一个先的软件,每一个品牌下都要加上,软件对品牌是继承的关系,想要对软件进行修改就要对类进行重写,类与类之间的耦合性太强,不利于扩展和维护。

抽象部分就是手机品牌,手机软件类中在有实实在在的打游戏或通信的代码,所以软件是实现部分。因而把手机软件类和手机品牌抽象类分开,手机软件是手机品牌的聚合成分, 每个品牌都可以实现所有软件的功能,降低了耦合性,有利于软件的扩展,维护和复用。

组合模式

组合模式(Composite)

将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。

UML图

结构型模式总结_第4张图片

自己的理解

什么时候使用:当需求中是体现整体和部分层次结构是,及希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑用组合模式了。

这个模式我们经常接触到,电脑盘里创建好多文件夹,每个文件夹下又可以创建好多文件,用户在创建或删除的时候不用考虑到底是枝节点还是叶节点,所有的根节点和叶节点都实现一个共同的接口,这个接口定义了增和删和显示的功能,只是叶节点只实现了接口中显示的功能。

享元模式

享元模式(Flyweight)

也叫蝇量模式,(Flyweight)运用共享技术有效地支持大量细粒度的对象。

UML图

结构型模式总结_第5张图片

自己的理解

用到的例子是网站,好多网页是相似的只有几个参数不同,所以,没有必要一直实例化。享元模式就是解决这个问题的,不用一直实例化,只要传个参数就成。

代理模式

代理模式(Proxy)

为其他对象提供一种代理以控制对这个对象的访问。

UML图

结构型模式总结_第6张图片

自己的理解

例子是找一个代理追女朋友,目的要达到女生不认识追她的男生,但是通过代理收到了礼物。抽象出一个接口包含所有送礼物的动作,男生和代理都实现这个接口,但是代理不是直接使用接口的动作,那样不成了代理送的礼物了吗?所以代理在每个动作中如送花,调用男生送花的动作,以此到达礼物送出去还不知道是谁送的效果。

外观模式

外观模式(Facade)

为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层的接系统更加容易使用。

UML图

结构型模式总结_第7张图片

自己的理解

什么时候使用:
(1)设计阶段 在初期设计的时候就要有意识的分层,跟之前学的数据库一样分为3层模式两级映像——外模式,逻辑模式和内模式,其中两级映像——外模式/逻辑模式映像,逻辑模式/内模式映像就像外观模式一样提供一个简单的接口把数据层,逻辑层和显示层分开。

(2)开发阶段 开发过程中因为不断的修改重构可能会出现许多小的类,用上外观,提供一个简单的接口,使开发起来更容易。

(3)维护阶段 维护的系统可能已经非常复杂了,再在它上面加一些新的功能,去和里面的类进行交互太困难了,外观就像一个中介,你跟他说,他去跟里面的类交涉,降低耦合性。

总结

设计模式很重要,需要学好几遍,先简单的总结一下,有个印象,以后结合实践再慢慢体会吧。

你可能感兴趣的:(设计模式)