第五章 代码的可复用性——可复用的设计模式

这一部分主要分两个方面:结构型模式、行为类模式来介绍六种java设计模式:

前三种为结构型模式,后三种为行为类模式

1. 适配器模式(Adapter)

该设计模式的目的在于将某各类/接口转换成客户期望的其他形式。

其核心思想是通过增加一个接口,将已存在的子类封装起来,客户端面向接口编程,从而隐藏了具体子类。并提供给一个用户希望得到的接口。

其用现有的各种组件组合成一个新的系统(包装wrapper)



首先我们来看一下适配器模式下的栗子:

类图:



如果我们不采用适配器模式会如何?


可见,客户的期望与此是不符的。

那么我们采用适配器模式:

这样,客户的需求就满足啦,也不必重新编写代码了。perfect!


2. 装饰器模式(Decorator)

允许向一个现有的对象添加新的功能,同时又不改变其结构。装饰者可以在所委托被装饰者的行为之前或之后加上自己的行为,以达到特定的目的。

该设计模式要解决的问题是为对象增加不同侧面的特性。

核心思想:对每一个特性构造子类,通过委派机制增加到对象上。

类图说明:


一点理解:就是假设有ABC三个对象分别拥有不同的特性,那么我们现有一个对象A(具体装饰类),想为其添加BC对象(具体组件)中的特性,如何办呢?我们可以去创建一个我们想要的期望对象的一个接口(抽象装饰类),至于如何实现其中的方法我们先不急。先在来构建一个引用BC的抽象类(抽象组件),那么好了抽象组件拥有BC的所有功能,A(具体装饰类)拥有A的所有功能,我们需要的是可以拥有这些功能的抽象装饰类(接口),接口里面实现的功能就都有了。那么我们只需要根据实际情况将抽象组件与具体装饰类通过委派等关系串在一起就实现了嘛……

这里大家如果不懂可以看这篇博客上的栗子,虽然没有写如何为具体类装饰方法,但思想很清晰,很容易理解,装饰方法大家可以自己尝试,思想有了不是很难。


3.外观模式(Facade):

其想要解决的问题是:客户端需要通过一个简化的接口来访问复杂系统内的功能如何做?

核心思想:通过一个统一的接口来取代一系列小接口调用,相当于对复杂的系统做了一个封装,简化客户端的使用。

类图:


这个模式是我认为这三个模式中最简单的,看个栗子吧:


传说中的外观模式!


客户端使用:


不知道看完这个例子的你是什么感受,反正当时我的感受是,纳尼?这不是我为了少写点代码才干的事情么?把方法里面的ifelse语句换成成了枚举类switch一下就成外观模式了?坑爹呢啊!!

其实就是等价的几种情况整合了一下,抽出来个枚举类,然后代码外用枚举类中的元素表示需求,代码内用一堆switch去判断实现,干货觉得是最少的了……


4. 策略模式&

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值