设计模式之链式结构思想

  根据所学的设计模式中的三个设计模式,即职责链模式、装饰者模式、代理模式的相关内容,让我们初步了解到了链式结构对于设计模式来说的相关重要性的思想。首先我们要对以上是那种设计模式进行一定的了解之后,再进行对于三个设计模式的对比,理解,初步对链式结构的相关思想进行相关的总结。

职责链模式

职责链模式(Chain of Responsibility Pattern):又叫责任链模式,为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。

模式的结构

 

职责链模式主要包含以下角色:
    抽象处理者(Handler)角色:定义一个处理请求的抽象类或接口,包含抽象处理方法和自己(传入下一个子类时赋值)。
    具体处理者(Concrete Handler)角色:实现抽象处理者的处理方法,判断能否处理本次请求,如果可以处理请求则处理,否则将该请求转给它的后继者。
    请求对象(Request):包含很多请求属性。
    客户类(Client)角色:创建处理链,并向链头的具体处理者对象提交请求,它不关心处理细节和请求的传递过程。

职责链模式的特点

职责链模式的优点:

【1】降低了对象之间的耦合度。该模式使得一个对象无须知道到底是哪一个对象处理其请求以及链的结构,发送者和接收者也无须拥有对方的明确信息。
【2】增强了系统的可扩展性。可以根据需要增加新的请求处理类,满足开闭原则。
【3】增强了给对象指派职责的灵活性。当工作流程发生变化,可以动态地改变链内的成员或者调动它们的次序,也可动态地新增或者删除责任。
【4】责任链简化了对象之间的连接。每个对象只需保持一个指向其后继者的引用,不需保持其他所有处理者的引用,这避免了使用众多的 if 或者 if···else 语句。
【5】责任分担。每个类只需要处理自己该处理的工作,不该处理的传递给下一个对象完成,明确各类的责任范围,符合类的单一职责原则。

职责链模式的缺点:

【1】不能保证每个请求一定被处理。由于一个请求没有明确的接收者,所以不能保证它一定会被处理,该请求可能一直传到链的末端都得不到处理。
【2】对比较长的职责链,请求的处理可能涉及多个处理对象,系统性能将受到一定影响。
【3】职责链建立的合理性要靠客户端来保证,增加了客户端的复杂性,可能会由于职责链的错误设置而导致系统出错,如可能会造成循环调用。

装饰者模式

指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式

装饰者模式的结构

 

装饰模式主要包含以下角色。

抽象构件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象。
具体构件(ConcreteComponent)角色:实现抽象构件,通过装饰角色为其添加一些职责。
抽象装饰(Decorator)角色:继承抽象构件,并包含具体构件的实例,可以通过其子类扩展具体构件的功能。
具体装饰(ConcreteDecorator)角色:实现抽象装饰的相关方法,并给具体构件对象添加附加的责任。

优点:

【1】装饰器是继承的有力补充,比继承灵活,在不改变原有对象的情况下,动态的给一个对象扩展功能,即插即用
【2】通过使用不用装饰类及这些装饰类的排列组合,可以实现不同效果
【3】装饰器模式完全遵守开闭原则

缺点:

【1】装饰模式会增加许多子类,过度使用会增加程序得复杂性

代理模式(静态代理)

代理模式:为其他对象提供一种代理,以控制对这个对象的访问。代理类的对象本身并不真正实现服务,我们在访问实际对象时,是通过代理对象来访问的。

静态代理在使用时,需要定义接口或者父类,被代理对象(即目标对象)与代理对象一起实现相同的接口或者是继承相同父类。

静态代理结构如下:


 抽象主题(Subject)类:通过接口或抽象类声明真实主题和代理对象实现的业务方法。
 真实主题(Real Subject)类:实现了出现主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。
 代理(Proxy)类:提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能。

 

静态代理的 优缺点:

【1】优点:在不修改目标对象的功能前提下,能通过代理对象对目标功能扩展。
【2】缺点:因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类。一旦接口增加方法,代理对象与目标对象都要维护。

  链式思维的关键是要想到一个事物与其他事物是形成一条链的,每个事物都像锁链上的一个环,环环相连。既是如同三层架构一般,我们定义了一个完整的链式思维结构,而我们在需要的时候,就需要在接口上设计相关的抽象方法,我在那个层次需要时进行调用即可。一种即是从问题本身为出发点,对问题处理进行全程跟踪,并能及时有效的对各个环节所产生的结果进行收集、梳理、分析所产生的优劣影响,也是各个功能的思维逻辑;而另一种则是对于问题以全局的宏观把控,问题需求的拆解,流程化的处理过程以及对细节和品质的深入考量,直到问题的完成并得到产后护理结果的反馈,最终形成构思、创作、应用、校验全链路的思维逻辑。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值