首页 > 财经旅游 > 正文

设计模式——适配器模式和装饰器模式

2019-08-10 10:24:55   来源:东方头条   评论:0

适配器模式:

定义:将一个类的接口转换为客户希望的另一个类的接口,适配器模式使得原本由于接口不兼容的那些类可以一起工作;

简单说明:它主要是实现接口转换;是原本不兼容的事物能够协同工作,而无须修改现有事物的内部结构;

这个模式也很简单,笔记本上的那个拖在外面的黑盒子就是个适配器,一般你在中国能用,在日本也能用,虽然两个国家的的电源电压不同,中国是 220V,日本是 110V,但是这个适配器能够把这些不同的电压转换为你需要的 36V 电压,保证你的笔记本能够正常运行;

适配器模式又分为类适配器模式和对象适配器模式:

类适配器模式就是适配器类和适配者类是继承关系,而对象适配适配器模式就是适配器类和适配者类是关联关系;

模式结构:Target(目标抽象类):抽象类定义客户要用的特定领域的接口,可以是抽象类或接口或者是类;Adapter(适配器类):适配器类可以调用另一个接口,接口作为一个转换器,对适配者类和目标类进行适配;Adaptee(适配者类):适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体类,包含了客户希望使用的业务方法,在某些情况下甚至没有适配者类的源代码;Client(客户类):在客户类中针对目标抽象类进行编程,调用在目标抽象类中定义的业务方法;

类适配器模式结构:

对象适配器模式结构图:

比如现在有一个抽象类,它里面有绘制点、线、方块的方法,而为了让客户在使用这些接口的时候不用关心它们底层调用的不同,我们还使用了一个抽象类来规范这些图形的接口,现在我们需要绘制一个圆,并且发现已有一个类里面有绘制圆的方法,但是这个方法名和我们抽象类规定的方法名称不符,这个时候如果去修改绘制圆的方法名,那就要修改所有引用该方法的地方,修改抽象方法名,那也要修改所有的实现类,都很麻烦,要解决这样的麻烦,就要用我们的适配器模式了

适配器模式的优缺点:

优点:将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,而无需修改原来的代码;增加了类的透明性和复用性,将具体的实现封装在适配者类中,对于客户端来说是透明的,而且提高了适配者的复用性;灵活性和扩展性都非常好,通过使用配置文件,可以很方便的更换适配器,也可以在不修改原有代码的基础上增加新的适配器类,符合开闭原则;对象适配器模式的优点还有:对象适配器模式可以把多个不同的适配者适配到同一个目标,也就是说,同一个适配器可以把适配者类和它的子类都适配到目标接口;

类适配器缺点:

对于不支持多重继承的语言,一次最多只能适配一个适配者类,而且目标抽象类只能为接口,不能为类,其使用有一定的局限性,不能将一个适配者类和它的子类同时适配到目标接口;

对象适配器的缺点:

与类适配器模式相比,要想置换适配者类的方法就不容易,如果一定要置换掉适配者类的一个或多个方法,就只好先做一个适配者类的子类,将适配者类的方法置换掉,然后再把适配者类的子类当作真正的适配者进行适配,实现过程较为复杂;

装饰器模式:

定义:动态地给一个对象添加一些额外的职责,就扩展功能而言,它比生成子类方式更为灵活;

简单说明:不使用继承而通过关联关系来调用现有类中的方法,达到复用的目的,并使得对象的行为可以灵活变化;

模式结构:Component(抽象构件):定义了对象的接口,可以给这些对象动态的增加职责(方法);ConcreteComponent(具体构件):定义了具体的构建对象,实现了在抽象构建中声明的方法,装饰器可以给它增加额外的职责;Decorator(抽象装饰类):抽象装饰类是抽象构件类的子类,用于 给具体构件增加职责,但是具体职责在其子类中实现;ConcreteDecorator(具体装饰类):具体装饰类是抽象装饰类的子类,复杂向构件添加新的职责;

比如:

变形金刚在变形之前是一辆汽车,它可以在陆地上移动。当它变成机器人之后除了能在陆地上移动之外,还可以说话;如果需要,他还可以变成飞机,还能飞翔;

看了这篇文章之后,是不是受益匪浅,如果你学到了的话,还想提升一下自己,就可以找小编来获取更高级的视频资料 ,

小编这里有一套Java免费视频教程,现在分享给大家,大家只需要转发关注小编之后,私信小编“学习”来进行获取,还有免费大礼包赠送~~~

  责任编辑:

今日推荐

习近平在第五届中国国际进口博览会开幕式上发表致辞

11月4日晚,国家主席习近平以视频方式出席在上海举行的第五届中国国际进口博览会开幕式并发表题为《共创开放繁荣的美好未来》的致辞。新华社记者 李学仁 摄[详细]

中国共产党第二十次全国代表大会闭幕会在京举行

10月22日,中国共产党第二十次全国代表大会闭幕会在北京人民大会堂举行。新华社记者 陈建力 摄[详细]

天天学习|中南海月刊(2022.09)

天天学习金色九月,喜迎丰收。9月,一个个瞬间令人难忘:主持中央深改委会议决定健全关键核心技术攻关新型举国体制;出席中央军委晋升上将军衔仪式颁发命令状;新冠肺炎疫情发生以来首次出访...[详细]