java设计模式(适配器模式、装饰器模式、访问者模式)

适配器模式

把一个类的接口变换成客户端能够接受的另一种接口,从而使两个接口不匹配而无法在一起工作的两个类能够在一起工作。

结构:

  • Target(目标接口):所要转换的接口
  • Adaptee(源角色):需要适配的接口
  • Adapter(适配器):将源接口适配成目标接口,继承源接口,实现目标接口。

例:java I/O中的适配器模式
InputStreamReader、OutputStreamWriter分别继承Reader和Writer接口,但是创建两者的对象,必须要在构造方法中传入InputStream和OutputStream的实例。
以InputStreamReader为例,InputStreamReader作为适配器,实现了Reader接口,并且持有了InputStream的引用(通过StreamDecoder简介持有,因为byte到char需要经过编码)。

装饰器模式

赋予被装饰的类更多的功能,但是对于原来该类的使用者不应该感受到装饰前和装饰后有什么不同(即,实现被装饰类的所有功能,然后再原有的基础上赋予其更多的功能)

结构:

  • Component:抽象组件角色,定义一组抽象的接口,规定这个被装饰组件都有哪些功能
  • ConcreteComponent:实现这个抽象组件的所有功能
  • Decorator:装饰器角色,它持有一个Component对象实例的引用,定义一个与抽象组件一致的接口
  • ConcreteDecorator:具体的装饰器实现者,负责实现装饰器角色定义的功能

例:java I/O中的装饰器模式
以FilterInputStream为例,InputStream是一个抽象组件,FileInputStream是InputStream抽象组件的具体实现FilterInputStream作为修饰器,实现InputStream所有接口,并且持有InputStream引用,BufferedInputStream作为FilterInputStream具体实现,给InputStream附加了部分功能。

访问者模式

访问者模式设计的初衷是为了将稳定的数据结构和对数据结构变化多端的操作解耦,可以让操作者针对同一套数据结构自有的设计操作集合。

结构:

Client ----------------------- Visitor <-继承- ConcreteVisitor(具体的访问者,可以是多个)
|                                 |(间接引用)
|                                 |
ObjectStructure --<持有引用>-- Element <-继承- ConcreteElementX(具体节点元素,可以是多个)
  • 抽象访问者(Visitor):声明所有访问者需要的接口
  • 具体访问者(ConcreteVisitor):实现抽象访问者声明的接口
  • 抽象节点元素(Element):提供一个接口,能够接受访问者作为参数传递给节点元素
  • 具体节点元素(ConcreteElement):实现抽象节点元素声明的接口
  • 结构对象(ObjectStructure):提供一个接口,能够访问到所有节点元素,一般作为一个集合特有节点元素的引用
  • 客户端(Client):分别创建访问者和节点元素的对象,调用访问者访问变量节点元素

<访问者模式,待具体分析,及实例演示>

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 定义 装饰器模式又名包装(Wrapper)模式。装饰器模式以对客户端透明的方式拓展对象的功能,是继承关系的一种替代...
    步积阅读 35,768评论 0 38
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,262评论 0 2
  • 姑娘你想辞职,我们都想辞职,总是不满意当前的生活,总是想我们不应该属于当前,我们的人生不应该止步不前!我们的人生不...
    喀喇撒哈拉阅读 248评论 0 0
  • 要想成功,就要时时怀着得意淡然失意坦然的乐观心态,笑对自己的挫折何苦难,去做,去努力,争取成功!
    微笑你我他阅读 89评论 0 0
  • 你有没有遇到过这个问题: 写作,这个曾经还让你有些兴趣的事,怎么突然就变得讨厌了? 一打开word就头皮发麻,毫无...
    猎户先生阅读 2,032评论 13 41