【Java】设计模式--结构型模式

目录

适配器模式

类的适配器模式(extends + implements)[Adapter的类]

对象的适配器模式(implements + 对象) [这里的对象指的是Adaptee的对象]

接口的适配器模式(abstract)[ 将接口适配成抽象类与类进行沟通 ]

装饰者模式(AOP)

代理模式(Proxy)

外观模式(Facade)

桥接模式(Bridge)

组合模式(Composite)

享元模式(Flyweight)共享单元(对象)


 

 

适配器模式


希望由某个类A(Adapter)调用方法B,但是方法B是类B(Adaptee)中的方法,于是用一个目标接口(Target)合并B中方法

(简单来说:就是类A调用类B方法)

*Adapter:实现了目标接口,通过包装一个需要适配的对象,将原接口转为目标接口

*Adaptee:需要适配的类或者接口(需要调用的方法所在类)

*Target:客户所期待的接口(所希望这个类有的方法),可以是具体的类也可以是抽象类或者接口

类的适配器模式(extends + implements)[Adapter的类]

*希望将一个类转换成适合另一个新接口的新类:继承原有子类、实现新接口

 

对象的适配器模式(implements + 对象) [这里的对象指的是Adaptee的对象]

*希望将一个对象转换成适应另一个接口的对象

 

接口的适配器模式(abstract)[ 将接口适配成抽象类与类进行沟通 ]

*这个有点特别,因为并不需要调用别的类的方法,而是减少对于接口的实现,如图类AAA通过继承一个抽象类,只实现了A方法

 

装饰者模式(AOP)


顾名思义,装饰 --> 变得更厉害,能装饰什么呢?属性?似乎有点没用,不如直接加。方法?好像有点用哦

*继承实现装饰者模式相同功能为什么不好

装饰是构造函数参数传递进行增强

如果为了某个功能而产生子类(继承)那么那个体系是非常臃肿的

*例如:

你有个对象有个功能 是在N年前建立的,如今你觉得功能不够用了 写个类把对象传进来就可以解决问题(动态增加)

如果这个功能写错了 我就把自己写的功能去掉又不影响以前的功能灵活性相当强的(动态撤销)

 

代理模式(Proxy)


代理模式和装饰模式非常类似,甚至代码都类似。

*二者最主要的区别是:

代理模式中,代理类对被代理的对象有控制权,决定其执行或者不执行。

而装饰模式中,装饰类对代理对象没有控制权,只能为其增加一层装饰,以加强被装饰对象的功能,仅此而已

*测试用例:

 

外观模式(Facade)


外观模式是为了解决类与类之间的依赖关系的,像spring一样,可以将类和类之间的关系配置到配置文件中。

而外观模式就是将他们的关系放在一个Facade类中,降低了类之间的耦合度,该模式中没有涉及到接口

 

Facade类(注入其他类)

 

桥接模式(Bridge)


桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化,像我们常用的JDBC桥DriverManager一样,JDBC进行连接数据库的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不用动,原因就是JDBC提供统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就行了

//注册数据库驱动程序
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection(dbUrl, dbUserName, dbPassWord);


--------------------- 
作者:终点 
来源:CSDN 
原文:https://blog.csdn.net/zhangerqing/article/details/8239539 
版权声明:本文为博主原创文章,转载请附上博文链接!

我的理解就是,在需要多种实现自由切换时,一般的做法可能是写一个基本类(抽象类),然后不同的实现需求就都继承这个类来实现,使用的是继承

而*桥接模式是把方法实现的部分分离出来需要哪种实现就传入哪种实现进抽象类的实现类,就像传入一个参数给构造函数一样,只不过我们传的是方法的实现并且使用的是耦合。而所谓的桥,就是连接抽象和实现的类(MyBridge)

需要分离不同实现的部分method()以及不同的实现SourceA/SourceB

实现的这一部分可以独立变化

抽象的这一部分可以独立的变化(*为什么使用抽象类原因)

连接抽象和实现后,变成一个“完整”的类(所谓的桥

 

组合模式(Composite)


组合模式有时又叫部分-整体模式在处理类似树形结构的问题时比较方便

*部分-整体:也就是由部分组成了一个整体,那么就要有一个整体以及若干个部分(有点类似于树的数据结构)

以二叉树来举例,每一个结点都是上一层的部分,同时也是下一层的整体

Test

 

 

享元模式(Flyweight)共享单元(对象)


享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用

*个人理解:有很多地方需要某个类的对象,如果每个地方都创建,就会造成浪费,为什么不用一个池来管理呢,如果需要此对象,就从池传过去。

享元模式的核心在于享元工厂类(FlyweightFactory),享元工厂类的作用在于提供一个用于存储享元对象的享元池

用户需要对象时,首先从享元池中获取;如果享元池中不存在,则创建一个新的享元对象返回给用户,并在享元池中保存该新增对象

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值