JAVA设计模式之适配器模式

定义:

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

适配器的分类:

    1. 组合:采用组合的方式的适配器成为对象适配器  特点:把“被适配者”作为一个对象组合到适配器类中,以修改目标接口包装被适配者

      2.继承:采用继承的方式称为类适配器       特点:通过多重继承不兼容接口,实现对目标接口的匹配,单一的为某个类而实现适配

作用:

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

2.  重用:复用了现存的类,解决了现存类和复用环境要求不一致的问题。

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

示例项目:有台笔记本需要三相插座充电,但有个二相电源,需要创建一个适配器进行两项转三相进行充电

代码示例

1.创建一个三相插座接口

1 /**
2  * 三相插座接口
3  * */
4 public interface ThreePlugIf {
5     //使用三相电流充电
6     public void powerWithThree();
7 
8 }
View Code

2.创建一个二相电源类

1 public class GBTowPlug {
2     //使用二相电流供电
3     public void powerWithTow(){
4         System.out.println("使用二相电流供电");
5     }
6 }
View Code

3.创建一个笔记本类,使用三相插座进行充电,但电源是两相的,需要适配器进行转换

 1 public class NoteBook {
 2     private ThreePlugIf plug;
 3     public NoteBook(ThreePlugIf plug){
 4         this.plug = plug;    
 5     }
 6     //使用插座充电
 7     public void charge(){
 8         plug.powerWithThree();
 9         
10     }
11     
12 }
View Code

4-1.创建一个适配器(组合)

 1 /**
 2  * 二相转三相的插座适配器
 3  * */
 4 public class TowPlugAdapter implements ThreePlugIf {
 5     private GBTowPlug plug;
 6     public TowPlugAdapter(GBTowPlug plug){
 7         this.plug = plug;
 8     } 
 9     @Override
10     public void powerWithThree() {
11         System.out.println("通过转化");
12         plug.powerWithTow();
13     }
14 
15 }
View Code

4-2.创建一个适配器(继承)

 1 /**
 2  * 采用继承方式实现
 3  * */
 4 public class TowPlugAdapterExtends 
 5     extends GBTowPlug implements ThreePlugIf {
 6 
 7     @Override
 8     public void powerWithThree() {
 9         System.out.println("继承方式实现");
10         this.powerWithTow();
11     }
12 }
View Code

5.测试类

 1 public class Test {
 2     public static void main(String[] args) {
 3         /**组合方式*/
 4         GBTowPlug tow = new GBTowPlug();
 5         ThreePlugIf three = new TowPlugAdapter(tow);
 6         NoteBook nb = new NoteBook(three);
 7         nb.charge();
 8         /**继承方式*/
 9         three = new TowPlugAdapterExtends();
10         nb = new NoteBook(three);
11         nb.charge();
12     }
13 }
View Code
原文地址:https://www.cnblogs.com/wwzyy/p/4961990.html