目录
类的适配器模式(extends + implements)[Adapter的类]
对象的适配器模式(implements + 对象) [这里的对象指的是Adaptee的对象]
接口的适配器模式(abstract)[ 将接口适配成抽象类与类进行沟通 ]
适配器模式
希望由某个类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),享元工厂类的作用在于提供一个用于存储享元对象的享元池
用户需要对象时,首先从享元池中获取;如果享元池中不存在,则创建一个新的享元对象返回给用户,并在享元池中保存该新增对象