设置模式9(装饰者,责任链,桥接,访问者)

装饰者模式Decorator

    通过组合的方式动态的为对象透明的增加功能,

    本质是上功能的动态组合

XE10版本的装饰都有两个抽象类,并有相互继承的管理,实现类与实现的分离

 

目的是为了动态的增加功能

改变对象的外观

也可以认为是动态的算法骨架,但也只是模拟而已,两者的设计目的和原本的功能及本质的思想都是不一样的

 

组合模式

目的是管理组合对象和子对象,为他们提供统一的接口

   

策略模式

 

改变的是对象的内核,可以结合使用

  

模板方法

  

固定的算法骨架

 
     
     

 

责任链模式 chain of responsibility

为了避免发送者与接收者的耦合关系,将信息连成一个链,延着其传递消息,直到被处理

本质是分离职责,动态组合

对象处理相应的请求后即停止

  

如果执行请求后,继续传递就类似装饰者,但是两都的目的和手段都不同

 

组合模式

可以结合使用

  

装饰者

 

可以互相模仿功能

 

策略模式

  

可以在责任链中的某一环使用策略来决定其实现

桥接模式

分离抽象与实现

,使其可以独立变化

     

策略模式

分离算法,使其可以相互替换

   

状态模式

 

目的是封闭对象对应的行为,并在内部改变对象的行为

  

模板方法

    

抽象工厂

   

可以实现桥接中的接口对象

适配器

使不同接口的类可以一起工作

   

访问者模式

作用在对象结构中各元素的操作,它使你可以不改变元素的类的前提下定义作用于这些元素的操作

使用了二次分发

Element.Accpet(Ivisiter)

{

    Ivisiter.VisiElement(self);

}

本质是为了预留通路,回调实现

  

为元素添加新功能

 

组合模式

通常可以在组合的元素中预留下扩展接口

  

装饰者

 

增强对象的原有功能

 

解释器

  

抽象语法树由组合模式构成,如果需要为其增加新功能,以实现同一结构对象的不同解释与执行,就可以预留下访问者的接口

转载于:https://www.cnblogs.com/jspdelphi/p/7807610.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
25.1 场景问题 25.1.1 扩展客户管理的功能 考虑这样一个应用:扩展客户管理的功能。 既然是扩展功能,那么肯定是已经存在一定的功能了,先看看已有的功能:公司的客户分成两大类,一类是企业客户,一类是个人客户,现有的功能非常简单,就是能让客户提出服务申请。目前的程序结构如图25.1所示: 图25.1 已有的客户管理程序结构示意图 现有的实现很简单,先看看Customer的实现,示例代码如下: /** * 各种客户的父类 */ public abstract class Customer { /** * 客户编号 */ private String customerId; /** * 客户名称 */ private String name; /** * 客户提出服务请求的方法,示意一下 */ public abstract void serviceRequest(); } 接下来看看企业客户的实现示例代码如下: /** * 企业客户 */ public class EnterpriseCustomer extends Customer{ /** * 联系人 */ private String linkman; /** * 联系电话 */ private String linkTelephone; /** * 企业注册地址 */ private String registerAddress; /** * 企业客户提出服务请求的方法,示意一下 */ public void serviceRequest(){ //企业客户提出的具体服务请求 System.out.println(this.getName()+"企业提出服务请求"); } } 再看看个人客户的实现示例代码如下: /** * 个人客户 */ public class PersonalCustomer extends Customer{ /** * 联系电话 */ private String telephone; /** * 年龄 */ private int age; /** * 企业注册地址 */ private String registerAddress; /** * 个人客户提出服务请求的方法,示意一下 */ public void serviceRequest(){ //个人客户提出的具体服务请求 System.out.println("客户"+this.getName()+"提出服务请求"); } } 从上面的实现可以看出来,以前对客户的管理功能是很少的,现在随着业务的发展,需要加强对客户管理的功能,假设现在需要增加如下的功能: 客户对公司产品的偏好分析,针对企业客户和个人客户有不同的分析策略,主要是根据以往购买的历史、潜在购买意向等进行分析,对于企业客户还要添加上客户所在行业的发展趋势、客户的发展预期等的分析。 客户价值分析,针对企业客户和个人客户,有不同的分析方式和策略。主要是根据购买的金额大小、购买的产品和服务的多少、购买的频率等进行分析。 其实除了这些功能,还有很多潜在的功能,只是现在还没有要求实现,比如:针对不同的客户进行需求调查;针对不同的客户进行满意度分析;客户消费预期分析等等。虽然现在没有要求实现,但不排除今后有可能会要求实现。 25.1.2 不用模式的解决方案 要实现上面要求的功能,也不是很困难,一个很基本的想法就是:既然不同类型的客户操作是不同的,那么在不同类型的客户里面分别实现这些功能,不就可以了。 由于这些功能的实现依附于很多其它功能的实现,或者是需要很多其它的业务数据,在示例里面不太好完整的体现其功能实现,都是示意一下,因此提前说明一下。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值