`
Hode
  • 浏览: 27054 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

装饰模式Decorator

 
阅读更多
  • 装饰模式是逐层装饰,譬如齐天大圣,七十二般变化,大圣本尊,鱼虫,齐天大圣为抽象构件,大圣本尊为具体构件,七十二般变化为装饰角色,鱼虫为具体装饰角色
  • 装饰角色必须和抽象构件接口一致,七十二般变化就必须保证和齐天大圣接口一致,也就是实现齐天大圣接口;
  • 鱼由于继承七十二般变化,所以有如下层次结构:鱼即为七十二般变化即为齐天大圣,这也是符合实际的情况的,当然此鱼必须是齐天大圣用七十二般变化所化;
  • 由于有七十二般变化的装饰角色在,只要继承该装饰角色,大圣就可以化为花鸟虫鱼,无所不能;
  • 由于系统中,抽象构件是所有类的父类或者实现,所以尽量保证抽象构件类的轻量级,最好是接口;
  • 在简化模式下,齐天大圣和大圣本尊会转为一个类,那么七十二般变化则将继承该类;
  • 如果只有一种变化,那么七十二般变化和鸟也可以作为一个类,此时为最简单的装饰模式;
  • 语法上来说:装饰角色类必须在类里面放置一个抽象构件的引用,并实现抽象构件的相应方法,那么保证继承装饰角色的具体装饰角色类也是完整的。(该点需要琢磨)
  • 本尊非本尊,鱼非鱼,但是大圣是本尊,大圣也是鱼;也就是说具体构件不能直接实例化为具体构件,具体装饰角色也不能实例化为具体装饰角色,因为其本质还是抽象构件;
  • 透明的装饰模式必须保证具体装饰角色里面没有抽象构件接口未提供的新方法。 鱼者能游不能走,大圣能走不能游,在鱼方法中定义走即为游,那么也就是不管具体的装饰角色如何实现,大圣照样走就是了;
  • 半透明的装饰模式里面含有新方法,但是客户端不调用这些新方法,那么仍然是透明的;大圣所化之鱼能游,然吾等仍视之为大圣,故不知其能也;
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics