设计模式(java)

适配器模式

2019-01-09  本文已影响0人  greensure

目录

1、什么是适配器模式?
2、适配器模式结构?
3、如何实现适配器模式?
4、适配器模式的特点?
5、适配器模式在项目中的应用(场景)?
6、适配器模式的优点?
7、适配器模式的缺点?
8、适配器模式的作用
9、适配器模式拓展



参考资料:

https://www.imooc.com/learn/146

https://design-patterns.readthedocs.io/zh_CN/latest/structural_patterns/adapter.html#id11

适配器模式案列代码


1、什么是适配器模式?

适配器模式将一个类的接口,转换成客户期望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作;

2、适配器模式结构?

适配器模式包含如下角色:

Target:目标抽象类

Adapter:适配器类

Adaptee:适配者类

Client:客户类

3、如何实现适配器模式?

适配器模式有对象适配器和类适配器两种实现;

way1 使用组合的方式实现适配器模式;

way2 使用继承的方式实现;

(1)组合:采用组合方式的适配器称为对象适配器;

特点:把“被适配者”作为一个对象组合到适配器类中,以修改目标接口包装被适配者;

对象适配器:


对象适配器.jpg

(2)继承:采用继承方式的称为类适配器

类适配器:


类适配器.jpg

注:Java是单继承

4、适配器模式的特点?

特点:

通过多重继承不兼容接口,实现对目标接口的匹配,单一的为某个类而实现适配;

适配器有很多的变体——》把不兼容的转化成兼容的、匹配的都叫做适配器;

(1)适配器对象实现原有接口

(2)适配器对象组合一个实现新接口的对象(这个对象也可以不实现一个接口,只是一个单纯的对象)

(3)对适配器原有接口方法的调用被委托给新接口的实例的特定方法

5、适配器模式在项目中的应用(场景)?

在以下情况下可以使用适配器模式:

系统需要使用现有的类,而这些类的接口不符合系统的需要。

想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。

6、适配器模式的优点?

7、适配器模式的缺点?

类适配器模式的缺点如下:

对于Java、C#等不支持多重继承的语言,一次最多只能适配一个适配者类,而且目标抽象类只能为抽象类,不能为具体类,其使用有一定的局限性,不能将一个适配者类和它的子类都适配到目标接口。

对象适配器模式的缺点如下:

与类适配器模式相比,要想置换适配者类的方法就不容易。如果一定要置换掉适配者类的一个或多个方法,就只好先做一个适配者类的子类,将适配者类的方法置换掉,然后再把适配者类的子类当做真正的适配者进行适配,实现过程较为复杂。

8、适配器模式的作用

适配器就是为了解决目标接口与原本接口不兼容问题而引入的;


(1)透明

通过适配器,客户端可以调用同一接口,因而对客户端来说是透明的。这样做更简单、更直接、更紧凑;


(2)重用

复用了现存的类,解决了现存类和复用环境要求不一致的问题;


(3)低耦合

将目标类和适配者类解耦,通过引入一个适配器类重用现有的适配者类,而无需修改原有代码(遵循开闭原则)

9、适配器模式拓展

Default配器模式(Default Adapter Pattern) 或 缺省适配器模式


当不需要全部实现接口提供的方法时,可先设计一个抽象类实现接口,并为该接口中每个方法提供一个默认实现(空方法),那么该抽象类的子类可有选择地覆盖父类的某些方法来实现需求,它适用于一个接口不想使用其所有的方法的情况。因此也称为单接口适配器模式。

总结

有人认为讲解设计模式的例子都太简单,看着感觉是那么回事,但是要是真想在项目开发中使用,还真是应用不到。其实我们不必在项目中刻意使用设计模式,而是应该从实际的设计问题出发,看哪个模式能解决我们的问题,就使用哪个模式。不要为了使用模式而使用模式,那样就舍本逐末了,一般情况下,只要遵循一定的设计原则就可以了,设计模式也是根据这些原则被总结出来的,熟悉了这些原则,模式自然而然就有了。

上一篇 下一篇

猜你喜欢

热点阅读