|
后面再详细的介绍各设计模式的使用方法 与使用条件 另外还有优缺点
当然这些在书上都有
结构型模式
结构型模式是使用组合来实现设计的模式 通过组合类或对象来得到更大的结构(想想变形金刚tongue.gif) 类的组合是使用多重继承 把两个或以上的类组成一个类 新类有所有父类的性质 对象的组合是使用对象成员变量的办法来实现新的功能
根据上面的设计要求 优先使用组合而不是继承 所以理解结构型模式也是很重要的
结构型模式有如下八种
结构型类形式 适配器 adapter 将一个类的接口转换成客户希望的另外一个接口,使因为接口不兼容的类可以互相工作 这里是通过继承的方法实现接口的转换
结构型对象模式 适配器 adapter 将一个类的接口转换成客户希望的另外一个接口,使因为接口不兼容的类可以互相工作 这里是通过成员变量的方法来实现
上面两个都是适配器 功能都是因为现有的接口无法满足要求 需要转换 分开只是两个实现适配器的方法不同 一个通过继承 另一个通过成员变量
桥 bridge 将抽象部分与实现部分分离 使它们可以独立的变化 例子中 抽象就是window,这是一个窗口类 提供窗口的功能 如画框等高级功能 实现就是windowimp 是各平台上的具体显示办法的基类 主要包括画点 画线 画文字 windowimp只有低级的显示功能 window调用windowimp来实现自己的窗口功能 针对各平台的窗口子类从windowimp继承 并实现对应的windowimp功能 在这里抽象与实现的解释 window认为是抽象类 是因为其它类都是使用window类提供的高级显示功能 它们不与windowimp打交道 windowimp的子类提供具体的低层显示功能 被window类对这些功能进行封装提供更高级的显示功能 所以认为windowimp是实现类 window类是抽象类
组合 composite 将对象组合成树型结构以表示"部分-整体"的层次结构.composite使得用户对单个对象和组合对象的使用有一致性 对象和对象的组合在接口上一样 所以对它们的操作也一样 方便用户的使用
装饰 decorator 动态的给一个对象增加另外的职责 注意 是给一个对象而不是一个类增加功能 ,我们知道给类增加功能可以使用继承的办法,但是 给对象就没有必要那么麻烦 可以把这个对象嵌入另一个对象中 由另一个对象增加功能.我们称这个嵌入的对象为装饰 这个装饰与它装饰的组件接口一致 因此对使用这个组件的客户透明 当装饰接收到客户请求时 把请求转发给组件 并在转发前后增加一些附加的操作 由于透明所以可以递归嵌套多个装饰 看书上例子 装饰类与它被装饰的类都是从同一个父类中继承的 另外装饰类定义了指向被装饰类的指针
外观 facade 为子系统中一组接口提供一个一致的界面 facade模式定义了一个高层接口 这一接口使得这个子系统更易使用 这个 通俗的说 就是把子系统中接口进行了封装 只提供简单的接口 客户不必了解这个子系统中有什么对象 有什么接口 只需要那套简单接口就可以了 如果使用过库的话 那对这点还是可以理解的 如socket库 你只知道有那些简单接口(socket,bind ,send,recv)其它复杂部分已经封装了
享元 flyweight 运用共享技术有效支持大量细粒度对象 出现原因: 有些系统的对象数量太大而难以直接使用对象建模 每个对象都有内部状态与外部状态 使用flyweight时 对象的内部状态保存在flyweight中 外部状态在调用时传入 这样只需要一个flyweight对象 就可以保存很多的内部状态了 而不必生成大量的对象 书上使用文字编辑器举例 字符内容就是内部状态 字符显示位置就是外部状态
代理 proxy 为其它对象提供一种代理以控制外界对这个对象的访问 如果你不希望外界访问某个接口 或是对某个接口在某种条件下显示另一个结果 这时就可以使用代替 这个和我们平时使用上网代理一样的道理 也很相似
|