第二章: Adapter 模式

  Adapter模式分为两种:

    1.类适配器模式

    2.委托适配器

我看的是《图解设计模式》这本书,这小鬼子说的话真难懂,只能好好看代码理解。

先说适配器模式要表达的什么意思,首先这个名字就很容易联想到电源适配器,一个道理,我要充电,但你不能让我直接把电线插进插座,这样肯定会冲爆,我用不了这么多电啊! 这时候就需要一个适配器,给电压转换一下充的舒舒服服的,就这意思。

    实际发开中,有一个类库写了很多方法,但我只需要其中一两个,那么就写一个适配器,把这两个方法拿出来用,要是出了Bug,就直接去Adapter里面找,而不是去翻那个类库。

    

  实际编码实现(类适配):

  Banner类所扮演的角色是(Adaptee(被适配)),它内部拥有两个方法,很简单的打印语句:

    

package example.adapter;

public class Banner {
private String string; public Banner(String string) {
super();
this.string = string;
} public void showWithPeren() {
System.out.println("(" + string + ")");
} public void showWithAster() {
System.out.println("*" + string + "*");
}
}

    

   Print是需求,你需要什么?

package example.adapter;

public interface Print {

    public abstract void printWeak();

    public abstract void printStrong();
}

  

  PrintBanner是适配器,实现需求,继承Banner,对外提供Banner的构造和需要的方法:

  

package example.adapter;

public class PrintBanner extends Banner implements Print{

    public PrintBanner(String string) {
super(string);
} @Override
public void printWeak() {
showWithPeren();
} @Override
public void printStrong() {
showWithAster();
} }

  Main测试:

package example.adapter;

public class Main {
public static void main(String[] args) {
Print p = new PrintBanner("HelloWorld");
p.printWeak();
p.printStrong();
}
}

    实际编码实现(委托):

    将Print和PrintBanner稍作改动:

    现在,PrintBanner里面拥有了Banner的成员并在构造方法里面实例化进行调用。

package example.adapter.two;

public class PrintBanner extends Print{

    private Banner banner;

    public PrintBanner(String string) {
super();
this.banner = new Banner(string);
} @Override
public void printWeak() {
banner.showWithPeren();
} @Override
public void printStrong() {
banner.showWithAster();
} }

  

package example.adapter.two;

public abstract class Print {

    public abstract void printWeak();

    public abstract void printStrong();
}

  

  

  

Adapter适配器模式--图解设计模式的更多相关文章

  1. [C# 设计模式] Adapter - 适配器模式(两种)

    Adapter - 适配器模式 序 现实生活中,我们常用到适配器. 你当前打开我这篇文章的笔记本电脑,电源的另一边不正连着一块适配器吗? 你平时想将三口插座插进二口插座里面,不也需要一个适配器吗? 整 ...

  2. 设计模式06: Adapter 适配器模式(结构型模式)

    Adapter 适配器模式(结构型模式) 适配(转换)的概念无处不在:电源转接头.电源适配器.水管转接头... 动机(Motivation)在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象 ...

  3. C++设计模式-Adapter适配器模式

    Adapter适配器模式作用:将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 分为类适配器模式和对象适配器模式. 系统的数据和 ...

  4. C++设计模式-Adapter适配器模式(转)

    Adapter适配器模式作用:将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 分为类适配器模式和对象适配器模式. 系统的数据和 ...

  5. 适配器模式 adapter 结构型 设计模式(九)

    现实世界中的适配器模型   先来看下来几个图片,截图自淘宝 上图为港版的插头与港版的插座   上图为插座适配器卖家的描述图   上图为适配后的结果 现实世界中适配器模式 角色分类 这就是适配器模式在电 ...

  6. 设计模式C++学习笔记之八(Adapter适配器模式)

      适配器模式,使用之处比较特殊,不属于常规设计模式,主要用于不同系统之间的处理.是将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工 ...

  7. 一天一个设计模式——Adapter适配器模式(Wrapper模式)

    一.模式说明 在现实生活中,当需要将两种设备连接起来,但是两个设备的接口规范又不一致(比如电脑上只有Type-C接口,但是你的显示器是HDMI接口),这时候就需要一个适配器,适配器一端连接电脑,一端连 ...

  8. 设计模式(七):Adapter 适配器模式 -- 结构型模式

    1. 概述: 接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题.程序提供者们修改他们的代码;系统库被修正;各种程序语言以及相关库的发展和进化.  例子1:iphone4,你即可以 ...

  9. 设计模式(6)--Adapter(适配器模式)--结构型

    1.模式定义: 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 2.模式特点:  Adapter模式使原本因接口不匹配(或者不兼 ...

随机推荐

  1. 嵌入式物联网32 ARM linux 等创客学院学习视频共享给大家

    大家手机号登录学习链接即可观看   有坛友说手机号登录不上  具体自测  http://www.makeru.com.cn/live/1392_303.html?s=60220走进嵌入式http:// ...

  2. CodeForces 696A:Lorenzo Von Matterhorn(map的用法)

    http://codeforces.com/contest/697/problem/C C. Lorenzo Von Matterhorn time limit per test 1 second m ...

  3. python generator与coroutine

    python  generator与coroutine 协程 简单介绍 协程,又称微线程,纤程,英文名Coroutine.协程是一种用户态的轻量级线程,又称微线程.协程拥有自己的寄存器上下文和栈,调度 ...

  4. 按行读取String类型

    BufferedReader br = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(content.getByt ...

  5. 什么是Task

    什么是Task Task是.Net4.0新增用来处理异步编程的,叫做基于“任务编程模型”,任务其实是架构在线程之上的,具体操作的时候还是由线程去执行的,任务的管控有点类似于线程池,程序中开10个Tas ...

  6. SpringCloud解析之Eureka

    本文基于Spring Cloud Edgware.SR6版本,从功能和架构上解析Eureka,让大家对Eureka有一个较为清晰的认识(本文默认大家对分布式微服务有一个初步的概念和理解,本文不涉及或少 ...

  7. cogs.12运输问题2题解

    乍一看貌似和运输问题1没有任何区别,但本题有一个有意思的东西叫做下限,我个人称之为非强制下限,因为本题中要求的实际是我走这条边这条边才至少走下限的流,虽然出题人没说,但从样例来看确实是这样的,而强制下 ...

  8. sql server 2382端口问题

    前两天在微软下载了官方示例数据库AdventureWorksDW2008R2及它的OLAP项目:AdventureWorks 2008R2 Analysis Services Project < ...

  9. 一文带你了解git

    git简介 什么是git? git是当今世界上最先进的分布式的版本控制系统. 版本控制系统分集中式的和分布式的,集中式的主要代表有CVS.SVN,而Git是分布式版本控制系统的佼佼者. 那什么是集中式 ...

  10. Spring_IoC注解开发和AOP的XML开发(学习笔记2)

    一:IoC注解开发 1,在applicationContext.xml中需要引入context约束 <beans xmlns="http://www.springframework.o ...