有趣的设计模式——适配器模式让两脚插头也能使用三孔插板


版权声明


场景与问题

众所周知,我们国家的生活用电的电压是220V而笔记本电脑、手机等电子设备的工作压没有这么高。为了使笔记本、手机等设备可以使用220V的生活用电就需要使用电源适配器(AC Adapter);也就是人们常说的充电器或变压器。有了这个电源适配器,原本不能直接工作的生活用电和笔记本电脑就可以兼容了。

另外,在生活中我们还经常类似头痛的小问题:插座是两脚的,但是插板却是三孔的。这个该怎么办呢?此时,适配器设计模式就能够帮到你!

适配器模式概述

在此,概述适配器模式。

适配器模式定义

Adapter Pattern: Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn't otherwise because of incompatible interfaces.

适配器模式:将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作。

适配器的实现就是把客户类的请求转化为对适配者的相应接口的调用。也就是说:当客户类调用适配器的方法时在适配器类的内部将调用适配者类的方法而这个过程对客户类是透明的;客户类并不直接访问适配者类。因此,适配器让那些由于接口不兼容而不能交互的类可以一起工作。

适配器模式可以将一个类的接口和另一个类的接口匹配起来而无须修改原来的适配者接口和抽象目标类接口。

适配器模式角色

在此,介绍适配器模式中的主要角色。

目标角色(Target):客户端所期待的接口(可以是具体类或者抽象类)。

源角色(Adaptee):被适配者。已经存在的需要适配的接口或类。

适配器(Adapter):将源接口转换成目标接口。

适配器模式案例

在此,以案例形式讲解适配器模式。

案例一

请看适配器模式案例一;项目结构如下:

Adaptee

java 复制代码
/**
* 本文作者:谷哥的小弟 
* 博客地址:http://blog.csdn.net/lfdfhl
* 代码描述:被适配的类。例如:两脚插头
*/
public class Adaptee {
    public void adapteeMethod() {
        System.out.println("两脚插头正常工作");
    }
}

Target

java 复制代码
/**
* 本文作者:谷哥的小弟 
* 博客地址:http://blog.csdn.net/lfdfhl
* 代码描述:目标接口(客户所期待的接口)。例如:三孔插板
*/
public interface Target {
    void targetMethod();
}

Adapter

java 复制代码
package com.adapter01;

/**
* 本文作者:谷哥的小弟 
* 博客地址:http://blog.csdn.net/lfdfhl
* 代码描述:适配类。例如:插头转换器
*/
public class Adapter extends Adaptee implements Target {
	// 实现Target接口中的方法
    @Override
    public void targetMethod() {
    	// 调用Adaptee中的方法
        super.adapteeMethod();
    }
}

Test

java 复制代码
package com.adapter01;
/**
* 本文作者:谷哥的小弟 
* 博客地址:http://blog.csdn.net/lfdfhl
* 代码描述:测试类
*/
public class Test {
	public static void main(String[] args) {
        Adapter adapter = new Adapter();
        adapter.targetMethod();
	}
}

测试

案例二

请看适配器模式案例二;项目结构如下:

Adaptee

java 复制代码
package com.adapter02;

/**
* 本文作者:谷哥的小弟 
* 博客地址:http://blog.csdn.net/lfdfhl
* 代码描述:被适配的类。例如:两脚插头
*/
public class Adaptee {
    public void adapteeMethod() {
        System.out.println("两脚插头正常工作");
    }
}

Target

java 复制代码
package com.adapter02;

/**
* 本文作者:谷哥的小弟 
* 博客地址:http://blog.csdn.net/lfdfhl
* 代码描述:目标类(客户所期待的类)。例如:三孔插板
*/
public abstract class Target {
	abstract void targetMethod();
}

Adapter

java 复制代码
package com.adapter02;

/**
* 本文作者:谷哥的小弟 
* 博客地址:http://blog.csdn.net/lfdfhl
* 代码描述:适配类。例如:插头转换器
*/
public class Adapter extends Target {
	// 持有Adaptee对象
	private Adaptee adaptee;

	public Adapter(Adaptee adaptee) {
		this.adaptee = adaptee;
	}

	// 重写父类Target中的方法
    @Override
    public void targetMethod() {
    	// 调用Adaptee中的方法
    	adaptee.adapteeMethod();
    }
}

Test

java 复制代码
package com.adapter02;
/**
* 本文作者:谷哥的小弟 
* 博客地址:http://blog.csdn.net/lfdfhl
* 代码描述:测试类
*/
public class Test {
	public static void main(String[] args) {
		Adaptee adaptee = new Adaptee();
        Adapter adapter = new Adapter(adaptee);
        adapter.targetMethod();
	}
}

测试

相关推荐
SuperherRo1 小时前
基础入门-Web应用&架构搭建&域名源码&站库分离&MVC模型&解析受限&对应路径
架构·源码·域名·web·解析·路径
博风1 小时前
设计模式:11、迭代器模式(游标)
设计模式·迭代器模式
春风十里不如你95272 小时前
【设计模式】【行为型模式(Behavioral Patterns)】之命令模式(Command Pattern)
设计模式·命令模式
工业互联网专业3 小时前
Python毕业设计选题:基于django+vue的期货交易模拟系统的设计与实现
vue.js·python·django·毕业设计·源码·课程设计
岳轩子5 小时前
23种设计模式之原型模式
设计模式·原型模式
十五年专注C++开发5 小时前
C++中的链式操作原理与应用(一)
开发语言·c++·设计模式
旺代8 小时前
C++设计模式(单例模式)
c++·单例模式·设计模式
LightOfNight8 小时前
【设计模式】创建型模式之单例模式(饿汉式 懒汉式 Golang实现)
单例模式·设计模式·golang
那年星空17 小时前
Flutter 设计模式全面解析:抽象工厂
flutter·设计模式·架构
博风18 小时前
设计模式:10、外观模式
设计模式·外观模式