码迷,mamicode.com
首页 > 其他好文 > 详细

软件构造复习内容(5)---面向复用的设计模式

时间:2020-06-23 19:09:12      阅读:43      评论:0      收藏:0      [点我收藏+]

标签:span   有一个   应该   任务   模式   iter   接口   复杂   nbsp   

1.Structural Patterns(结构模式)

  1.Adapter 适配器

    将某个类/接口转换为client期望的其他形式  

    通过增加一个接口,将已存在的子类封装起来,client面向接口编程,从而隐藏了具体实现子类

    举例说明:

      如果有一个类LegacyRectangle中一个方法展示一个左上角为(x1,y1),右下角为(x2,y2)的方法display

      但是客户端只能提供左上角坐标(x1,y1)和高和宽

      那么就可以新建一个类Rectangle是适配器,提供display方法为适配方法,将(x1,y1)和高和宽转化成左上角为(x1,y1),右下角为(x2,y2),然后调用LegacyRectangle中的方法满足客户端的需求

      在考虑到 依赖转置原则

      delegation的时候要通过interface建立关系,而非具体子类

      Rectangle实现接口Shpae,在客户端声明适配器类时的语句为 Shape s =new Rectangle();

  2.Decorator 装饰器

    用每个子类实现不同的特性,并且可以简单实现特性的任意组合

    为对象增加不同的侧面特性,对每一个特性构造子类,通过委托机制增加到对象上

    组成部分

    1.公共接口,装饰器,实现各个侧面的子类均需要实现

    2.装饰器,一般是抽象类

    3.实现各个侧面的子类

    4.用来装饰的基本类,装饰的起点在这里

    例子:装饰一个图形,画出不同形状,不同颜色的图形

    公共接口

    技术图片

 

     装饰器

    技术图片

 

    用来装饰的基本类

     技术图片

 

     形状:

    技术图片

 

     颜色:

    技术图片

 

    使用:

    技术图片

 

 

     例子稍有不恰当地方在于颜色输入颜色,形状则是“画形状”,l两个不在同一个平面。

    使用装饰器模式可以对画这一动作进行装饰,有对应的用来画形状的类,其中有各种设置颜色,形状,线条粗细,大小的方法

    在各个侧面类中进行设置,设置完之后画形状,也是对装饰器类的一个应用

  3.Facade 门面模式,外观模式

    客户端需要通过一个简化的接口来访问系统内复杂的功能,提供一个统一的接口,对复杂的系统做了一个封装,简化客户端使用

2.Behavioral Patterns (表现模式)

  1.Strategy 策略模式

    有多个不同的算法来实现同一个任务,但是需要client根据需要动态切换算法,就可以使用策略模式

  1.提供一个统一的接口类,各个策略纪要完成这一目标

  技术图片

 

   2.提供各个策略类:实现这一接口,完成方法

   3.使用

  在使用类内采用委托的方式委托对应的策略完成方法

  2.Template method 模板模式

    做事情的步骤一样,但是具体的方法不同

    共性的不走在抽象类内公共实现,差异化的步骤在子类中实现

    使用继承和重写实现模板模式

    模板模式在framework中被广泛使用

  3.Iterator 迭代器

    客户端希望遍历被放入容器/集合类中一组ADT对象,无需关心容器的具体类型

    不管对象被放进哪里,都应该提供同样的遍历方式

    技术图片

 

   容器例如List,可以返回一个itreator对象

     标准的遍历协议协议由以下3个方法组成

next()  //下一个
isDone()  //是否结束?
currentItem() //当前

      Java内提供了Itreator接口,自己实现迭代器可实现这个接口

 

 

软件构造复习内容(5)---面向复用的设计模式

标签:span   有一个   应该   任务   模式   iter   接口   复杂   nbsp   

原文地址:https://www.cnblogs.com/guiququ/p/13179754.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!