适配器模式

适配器模式分为两类:

  1. 类适配器

  2. 对象适配器

  • 类适配器

    当客户端是接口类型的时候,需要的方法与提供方法的实现无法匹配的时候,需要类适配器匹配;

    具体实现如下:创建一个子类实现客户端接口并同时集成实现类

  • 举例如下:IPersonService有一个方法say可以喊出人的名字,但是具体实现是Speaker的类的yell方法。Speaker方法无法直接实现IPersonService,所以需要一个中间类实现两者的匹配


        UML图如下:


适配器模式_第1张图片

    具体代码实现:  

package java.com.whereta.demo;

public interface IPersonService {

	public abstract void say(String name);

}

    

package java.com.whereta.demo;

public class PersonServiceImpl extends Speaker implements IPersonService {

	public void say(String name) {
		yell(name);
	}

}

    

package java.com.whereta.demo;

public class Speaker {

	public void yell(String name) {
		System.out.println(name);
	}

}

    通过类适配器,完美解决接口与实现不匹配的问题

  • 对象适配器

    当客户端非接口的时候,需要的方法与实现不匹配;


        具体实现如下:

                创建子类集成客户端,构造函数参数为实现类对象

    具体代码实现如下:

    

package com.whereta.demo.adapter.obj;

public class PersonService {

    public void say(String name){
        System.out.println(name);
    }
}
package com.whereta.demo.adapter.obj;

public class Speaker {

    public void yell(String name){
        System.out.println(name);
    }
}
package com.whereta.demo.adapter.obj;

public class XiaoMing extends PersonService{
    private Speaker speaker;

    public XiaoMing(Speaker speaker) {
        this.speaker = speaker;
    }

    @Override
    public void say(String name) {
        speaker.yell(name);
    }
}

这样具体使用的时候可以直接使用XiaoMing这个类即可

总结:对象适配器相对于类适配器而言并不严谨,当客户端改变的时候,在编译器无法检查出异常,导致运行期出错!!!


你可能感兴趣的:(适配器模式)