结构型设计模式(一)(适配器模式,桥接模式,组合模式,装饰模式)

结构模式用来描述的是如何组合类 的对象一获得更大的结构,分为类描述和对象描述。类描述的是如何通过继承提供更有用的接口而对象接口描述的是通过使用对象的组合或将对象含在其他对象里面一伙的更有用的结构》

适配器模式

用于复用已存在的接口与所需接口不一致的类。分有类适配器的对象适配器。类适配是通过类的继承来实现看类图:我们可以发现适配器类的作用就是在用户需要用特定接口时,而旧的实现类却没有实现接口。为了满足需求我们新建一个适配器类,在实现接口的过程中我们继承旧类,这样既满足接口也复用了旧类。甚至我认为在一定程度上可以理解为装饰模式。便于理解,我们仍以买衣服为例 给出Java代码:

public class 用户 {
public void 买衣服(){
卖外套和裤子 商家 = new 适配器();
商家.卖外套();
商家.卖裤子();
}

}
interface 卖外套和裤子{
public void 卖外套();
public void 卖裤子();
}
//旧的实现类只卖外套
class 卖外套{
//只是实现卖外套无法实现接口
public void 卖外套(){

}
}
//增加适配器类
class 适配器 extends 卖外套 implements 卖外套和裤子{
//继承父类方法
public void 卖外套(){

}
//适配器新增实现方法
public void 卖裤子(){

}
}

对象适配器的实现原理与类大同小异。由继承变为关联具体的实现呢。在Java代码中,其余不变只需将适配器中旧类方法的实现改为委派就可以。例如:

//增加适配器类
class 适配器  implements 卖外套和裤子{
private 卖外套 小商;
//通过使用旧类对象,委派方法。
//通过构造方法引入旧类
public 适配器 (卖外套 小商){
this.小商 = 小商;
}
public void 卖外套(){
this.小商.卖外套();
}
//适配器新增实现方法
public void 卖裤子(){

}
}

最后过多的使用适配器会让系统凌乱。因此我认为适配器适用于后期维护修补,而不适用于前期系统设计

桥接模式

用于将抽象模式与实现部分分离。什么意思呢?先看一下类图:


对于桥接模式的理解,我的理解就是面向接口编程,如我们开发网站时使用的MVC,我们在操作时先定义dao接口中各种方法,而具体实现放在daoimpl中但在使用时,我们是通过接口来进行相关操作。(我也是理解个大概,讲不清,对不起大家,希望大家理解并批评指出)

组合模式

有时候又称为“部分-整体”模式。什么意思呢,就是用户对单个对象和组合对象的使用具有一致性。实现的主要思想是递归组合。通过递归它将对象组合成树形结构。可分为安全的组合模式和透明的组合模式主要区别在于叶子节点的方法种类。安全的组合它要求管理方法(add remove get)不能出现在叶子节点中。而透明组合模式则要求叶子与树枝方法一致。看一下安全组合模式(常用)类图:


具体理解呢我们可以联想一下购物。我们去超市买东西都会有积分记录到你的会员卡上。而我们在使用会员卡的时候。我们可以在总部超市使用,也可以在分店中使用。也可以在乡里的一个加盟店中使用。其中总部含有许多分部分部也可以有很多加盟店。这就组成一个树枝结构。而加盟店则相当于叶子。而你在刷卡时相当于调用接口。只关心刷卡而不用关心是在哪刷的(叶子还是树枝)

装饰模式

又名包装模式是为已有的功能动态地添加更多功能的一种方式。具体理解这里给大家推荐一篇博文,本人认为写的不错(比我好多了)。希望帮到大家装饰模式



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值