适配器模式&&合成模式&&装饰者模式

适配器模式

含义:

在设计模式中,适配器模式(英语:adapter pattern)有时候也称变压器模式、包装样式。将一个类的接口转接成用户所期待的另一种接口。一个适配使得因接口不兼容而不能在一起工作的类能在一起工作。

何时使用:

对于已经使用的接口,需要进行修改/扩展时。改造前后项目一定要遵循依赖导致原则和里氏替换原则。

1、系统需要使用现有的类,而此类的接口不符合系统的需要。 2、想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。 3、通过接口转换,将一个类插入另一个类系中。(比如老虎和飞禽,现在多了一个飞虎,在不增加实体的需求下,增加一个适配器,在里面包容一个虎对象,实现飞的接口。)

具体实现方式

1.类的适配器模式

在这里插入图片描述

将被适配的类的api转换为目标类的api

target :目标角色,必须为接口

adaptee :源角色 需要适配的

adapter : 适配器角色 必须为具体类

2.对象的适配器结构(委托方式)
在这里插入图片描述

优缺点

类适配器的优点:

1、由于适配器类是适配者类的子类,因此可以再适配器类中置换一些适配者的方法,使得适配器的灵活性更强。

类适配器的缺点:

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

对象适配器的优点:

1、把多个不同的适配者适配到同一个目标,也就是说,同一个适配器可以把适配者类和他的子类都适配到目标接口。

对象适配器的缺点:

1、与类适配器模式相比,要想置换适配者类的方法就不容易。

合成模式

含义:

将对象组合成树形结构以表述"部分-整体"的层次结构,是的用户对单个对象和组合对象的使用具有一致性
在这里插入图片描述

component:抽象构件角色

leaf 叶子构件

composite 树枝构件

安全组合模式是对依赖倒转原则的破坏。

优缺点:

优点:

1.高层模块调用简单(所有节点都是component)
2.节点自由增加(增加一个节点只需要找到他的父节点就可以了,非常容易扩展,符合开闭原则)
缺点:

树叶和树枝定义时直接使用了实现类,与依赖倒置原则冲突。

使用场景:(树形结构时)

1.维护和展示整体-部分关系的场景,比如属性菜单,文件,文件夹管理

2.从一个整体中能够独立出部分模块或功能的场景

拓展:
透明组合模式:
在这里插入图片描述
遍历更加方便。

最佳实践:

1.xml的结构

2.js树形的菜单。

3.存储组织结构

装饰者模式

在这里插入图片描述含义:

动态的给一个对象添加一些额外的职责(通过改写对象的一些方法),就添加功能而言,装饰模式比生成子类更加灵活。

类图说明:

1.*抽象构件(Component):给出一个抽象类/接口,以规范准备接收附加责任的对象。2.具体构件(Concrete Component)角色:定义一个将要接收附加责任的类。3.装饰(Decorator)角色:持有一个构件(Component)对象的实例,并实现一个与抽象构件接口一致的接口。4.具体装饰(Concrete Decorator)角色:负责给构件对象添加上附加的责任。

如果只有一个装饰类的华,3 4 可以合成一个。

优缺点

优点:

1.装饰类与被装饰类解耦,不需要关系具体的被装饰类是什么(这也是为什么不使用子类继承重写方法的原因)

2.装饰模式是继承关系的一个替代方案。Decorator模式与继承关系的目的都是要扩展对象的功能,但是Decorator可以提供比继承更多的灵活性。

缺点:

1.这种比继承更加灵活机动的特性,也同时意味着更加多的复杂性。

使用场景:

1.需要扩展一个类的功能,或者增加附加功能。

2.需要动态给一个对象增加功能,这些功能可以在动态的撤销

3.需要一批的兄弟类进行改装或加装功能时。

举例:

数据库连接池日志打印。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值