1    重要

1.1  类适配器和对象适配器最大的区别

2    代码演练

2.1  代码演练1(类适配器模式)

2.2  代码演练2(对象适配模式)

2.3  代码演练3(具体应用场景)

1    重要
1.1  类适配器和对象适配器最大的区别

类适配器通过继承关系达到适配的目的,而对象适配器通过组合达到适配目的。

2    代码演练
2.1  代码演练1(类适配器模式)

需求相关:

a类和b类,想用b类或者b类的子类实现a类的方法

设计分析:

适配器类c继承了被适配器类a并且实现了目标类b的接口,通过适配器类c把被适配者a的方法适配给了目标类b;

适配器类c是被适配者a的子类,通过调用父类的方法实现了目标类b

UML类图:

测试类:

package com.geely.design.pattern.structural.adapter.classadapter;

public class Test {
public static void main(String [] args){
//打印目标类的方法
Target target = new ConcreteTarget();
target.request(); //打印适配器的方法
Adapter adapter = new Adapter();
adapter.request(); }
}

适配器类Adapter:

package com.geely.design.pattern.structural.adapter.classadapter;

public class Adapter extends Adaptee implements Target {
@Override
public void request() {
super.adapteeRequest();
}
}

目标接口Target:

package com.geely.design.pattern.structural.adapter.classadapter;

/**
* 目标接口
*/
public interface Target {
void request();
}

目标实现类ConCreteTarget:

package com.geely.design.pattern.structural.adapter.classadapter;

/**
* 目标实现类
*/
public class ConcreteTarget implements Target {
@Override
public void request() {
System.out.println("目标实现类自己的方法,,,");
}
}

被适配者类Adaptee:

package com.geely.design.pattern.structural.adapter.classadapter;

/**
* 该类是被适配者,想实现目标类的方法
*/
public class Adaptee {
public void adapteeRequest(){
System.out.println("被适配器执行它自己的方法。。。");
}
}

打印日志:

"C:\Program Files\Java\jdk1.7.0_79\bin\java.exe" "-javaagent:D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\lib\idea_rt.jar=33436:D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.7.0_79\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jce.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jfxrt.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\resources.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\rt.jar;F:\xiangmu3\Xin\Idea\design_pattern\target\classes;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\apache\tomcat\tomcat-servlet-api\7.0.64\tomcat-servlet-api-7.0.64.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\springframework\spring-webmvc\4.0.3.RELEASE\spring-webmvc-4.0.3.RELEASE.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\springframework\spring-beans\4.0.3.RELEASE\spring-beans-4.0.3.RELEASE.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\springframework\spring-context\4.0.3.RELEASE\spring-context-4.0.3.RELEASE.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\springframework\spring-aop\4.0.3.RELEASE\spring-aop-4.0.3.RELEASE.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\aopalliance\aopalliance\1.0\aopalliance-1.0.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\springframework\spring-core\4.0.3.RELEASE\spring-core-4.0.3.RELEASE.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\springframework\spring-expression\4.0.3.RELEASE\spring-expression-4.0.3.RELEASE.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\springframework\spring-web\4.0.3.RELEASE\spring-web-4.0.3.RELEASE.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\springframework\spring-oxm\4.0.3.RELEASE\spring-oxm-4.0.3.RELEASE.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\springframework\spring-jdbc\4.0.3.RELEASE\spring-jdbc-4.0.3.RELEASE.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\springframework\spring-tx\4.0.3.RELEASE\spring-tx-4.0.3.RELEASE.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\springframework\spring-test\4.0.3.RELEASE\spring-test-4.0.3.RELEASE.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\aspectj\aspectjweaver\1.7.3\aspectjweaver-1.7.3.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\mybatis\mybatis-spring\1.3.0\mybatis-spring-1.3.0.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\mybatis\mybatis\3.4.1\mybatis-3.4.1.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\aspectj\aspectjrt\1.6.11\aspectjrt-1.6.11.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\codehaus\jackson\jackson-mapper-asl\1.9.12\jackson-mapper-asl-1.9.12.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\codehaus\jackson\jackson-core-asl\1.9.12\jackson-core-asl-1.9.12.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\commons-dbcp\commons-dbcp\1.4\commons-dbcp-1.4.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\commons-pool\commons-pool\1.5.4\commons-pool-1.5.4.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\ch\qos\logback\logback-classic\1.1.2\logback-classic-1.1.2.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\slf4j\slf4j-api\1.7.6\slf4j-api-1.7.6.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\ch\qos\logback\logback-core\1.1.2\logback-core-1.1.2.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\mysql\mysql-connector-java\5.1.6\mysql-connector-java-5.1.6.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\com\google\guava\guava\20.0\guava-20.0.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\apache\commons\commons-lang3\3.5\commons-lang3-3.5.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\commons-collections\commons-collections\3.2.1\commons-collections-3.2.1.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\junit\junit\4.12\junit-4.12.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\joda-time\joda-time\2.3\joda-time-2.3.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\hashids\hashids\1.0.1\hashids-1.0.1.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\commons-net\commons-net\3.1\commons-net-3.1.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\commons-fileupload\commons-fileupload\1.2.2\commons-fileupload-1.2.2.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\commons-io\commons-io\2.0.1\commons-io-2.0.1.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\com\github\pagehelper\pagehelper\4.1.0\pagehelper-4.1.0.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\com\github\miemiedev\mybatis-paginator\1.2.17\mybatis-paginator-1.2.17.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\com\github\jsqlparser\jsqlparser\0.9.4\jsqlparser-0.9.4.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\commons-codec\commons-codec\1.10\commons-codec-1.10.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\commons-configuration\commons-configuration\1.10\commons-configuration-1.10.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\commons-lang\commons-lang\2.6\commons-lang-2.6.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\commons-logging\commons-logging\1.1.1\commons-logging-1.1.1.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\com\google\zxing\core\2.1\core-2.1.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\com\google\code\gson\gson\2.3.1\gson-2.3.1.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\redis\clients\jedis\2.6.0\jedis-2.6.0.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\apache\commons\commons-pool2\2.0\commons-pool2-2.0.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\projectlombok\lombok\1.16.18\lombok-1.16.18.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\springframework\session\spring-session-data-redis\1.2.5.RELEASE\spring-session-data-redis-1.2.5.RELEASE.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\redisson\redisson\2.9.0\redisson-2.9.0.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\io\netty\netty-common\4.1.8.Final\netty-common-4.1.8.Final.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\io\netty\netty-codec\4.1.8.Final\netty-codec-4.1.8.Final.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\io\netty\netty-buffer\4.1.8.Final\netty-buffer-4.1.8.Final.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\io\netty\netty-transport\4.1.8.Final\netty-transport-4.1.8.Final.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\io\netty\netty-resolver\4.1.8.Final\netty-resolver-4.1.8.Final.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\io\netty\netty-handler\4.1.8.Final\netty-handler-4.1.8.Final.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\javax\cache\cache-api\1.0.0\cache-api-1.0.0.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\io\projectreactor\reactor-stream\2.0.8.RELEASE\reactor-stream-2.0.8.RELEASE.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\io\projectreactor\reactor-core\2.0.8.RELEASE\reactor-core-2.0.8.RELEASE.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\reactivestreams\reactive-streams\1.0.0\reactive-streams-1.0.0.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\com\fasterxml\jackson\dataformat\jackson-dataformat-yaml\2.6.7\jackson-dataformat-yaml-2.6.7.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\yaml\snakeyaml\1.15\snakeyaml-1.15.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\com\fasterxml\jackson\core\jackson-core\2.6.7\jackson-core-2.6.7.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\com\fasterxml\jackson\core\jackson-databind\2.6.7\jackson-databind-2.6.7.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\com\fasterxml\jackson\dataformat\jackson-dataformat-avro\2.9.0\jackson-dataformat-avro-2.9.0.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\apache\avro\avro\1.8.1\avro-1.8.1.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\com\thoughtworks\paranamer\paranamer\2.7\paranamer-2.7.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\xerial\snappy\snappy-java\1.1.1.3\snappy-java-1.1.1.3.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\apache\commons\commons-compress\1.8.1\commons-compress-1.8.1.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\org\tukaani\xz\1.5\xz-1.5.jar;F:\xiangmu3\Xin\Idea\design_Maven_Home\lib\com\sun\faces\jsf-api\1.2\jsf-api-1.2.jar" com.geely.design.pattern.structural.adapter.classadapter.Test
目标实现类自己的方法,,,
被适配器执行它自己的方法。。。
Process finished with exit code 0
2.2  代码演练2(对象适配模式)

需求:a类和b类,想用b类或者b类的子类实现a类的方法

设计分析:

通过组合达到目的

关联关系:

只有 适配类发生了变化,其他类都不变。

UML类图:

适配器类:

package com.geely.design.pattern.structural.apapter.objectadapter;

public class Adapter implements Target {
Adaptee adaptee = new Adaptee(); @Override
public void request() {
adaptee.adapteeRequest();
}
}

测试类:

package com.geely.design.pattern.structural.apapter.objectadapter;

public class Test {
public static void main(String [] args){
//打印目标类的方法
Target target = new ConcreteTarget();
target.request(); //打印适配器的方法
Adapter adapter = new Adapter();
adapter.request(); }
}

目标接口:

package com.geely.design.pattern.structural.apapter.objectadapter;

/**
* 目标接口
*/
public interface Target {
void request();
}

目标实现类:

package com.geely.design.pattern.structural.apapter.objectadapter;

/**
* 目标实现类
*/
public class ConcreteTarget implements Target {
@Override
public void request() {
System.out.println("目标实现类自己的方法,,,");
}
}

被适配类:

package com.geely.design.pattern.structural.apapter.objectadapter;

/**
* 该类是被适配者,想实现目标类的方法
*/
public class Adaptee {
public void adapteeRequest(){
System.out.println("被适配器执行它自己的方法。。。");
}
}

打印日志:

目标实现类自己的方法,,,
被适配器执行它自己的方法。。。 Process finished with exit code 0
2.3  代码演练3(具体应用场景)

需求:

手机电源适配器,把220V交流电转化为5V直流电

测试类:

package com.geely.design.pattern.structural.adapter;

public class Test {
public static void main(String [] args){
DC5V dc5V = new PowerAdapter();
dc5V.outPutDC5V();
}
}

电源适配器类:

package com.geely.design.pattern.structural.adapter;

import com.geely.design.pattern.structural.adapter.AC220V;
import com.geely.design.pattern.structural.adapter.DC5V; /**
* 电源适配器
*/
public class PowerAdapter implements DC5V { //通过组合引入交流电220V
AC220V ac220V = new AC220V(); @Override
public int outPutDC5V() {
int adapterInput = ac220V.outputAC220V(); //变压器转换
int adapterOutput = adapterInput/44; System.out.println("使用电源适配器,最终转换为直流电"+adapterOutput+"V");
return adapterOutput;
}
}

目标类直流电5V类:

package com.geely.design.pattern.structural.adapter;

public interface DC5V {
//输出5V直流电
int outPutDC5V();
}

被适配器交流电220V类:

package com.geely.design.pattern.structural.adapter;

public class AC220V {
public int outputAC220V(){
int outputELE = 220;
System.out.println("输出交流电"+outputELE+"V");
return outputELE;
}
}

打印日志:

输出交流电220V
使用电源适配器,最终转换为直流电5V Process finished with exit code 0

设计模式课程 设计模式精讲 12-2 适配器模式coding的更多相关文章

  1. 设计模式课程 设计模式精讲 7-2 建造者模式Coding

    1 代码演练 1.1 建造者模式演练 1.2 静态内部类演练建造者模式(链式调用) 1 代码演练 1.1 建造者模式演练 需求: 根据讲师提供的课程名称,课程ppt,课程视频,课程手记,课程问答 制作 ...

  2. 设计模式课程 设计模式精讲 17-2 模板方法模式coding

    1 代码演练 1.1 代码演练1 1.2 代码演练2(后端课程子类运用钩子方法,加入写手记的方法) 1.3 代码演练3(前端有多个子类,有得需要写手记,有得不需要写,如何实现?) 1 代码演练 1.1 ...

  3. 设计模式课程 设计模式精讲 6-2 抽象工厂coding

    1 代码讲解 1.1 抽象工厂优点 1.2 抽象工厂缺点 1.3 为何有产品族的业务场景宜用抽象工厂设计模式?而不是工厂设计模式? 2 代码演练 2.1 抽象工厂代码演练 1 代码讲解 1.1 抽象工 ...

  4. 设计模式课程 设计模式精讲 18-2 迭代器模式coding

    1 代码演练 1.1 代码演练1(迭代器模式演练) 1.2 代码使用场景 1 代码演练 1.1 代码演练1(迭代器模式演练) 需求: 课程管理:需要实现课程可进行增添,删除,并能够打印出课程列表. u ...

  5. 设计模式课程 设计模式精讲 5-2 工厂方法coding

    1 课堂讲义 1.1 产品等级和产品簇 2 代码演练 2.1 工厂方法代码演练 1 课堂讲义 1.1 产品等级和产品簇 工厂方法是为了解决同一产品等级的业务抽象问题 抽象工厂方法是为了解决同一产品簇的 ...

  6. 设计模式课程 设计模式精讲 22-2 备忘录模式coding

    1 代码演练 1.1 代码演练1 1 代码演练 1.1 代码演练1 需求: 网站笔记需要存储快照,能实现回退的功能. 注意: a 设计的时候,可以分为笔记类,笔记快照类和 笔记快照管理类  三个类. ...

  7. 设计模式课程 设计模式精讲 2-3 UML类图讲解自上而下

    1 内容简析(易错加粗) 2 uml类图展示 1 内容简析(易错加粗) 1.1 设计模式中的对象关系 依赖关系 虚线箭头 组合关系 实心菱形 聚合关系 空心菱形(想象成盘子,盛东西,盘子的多,另一方少 ...

  8. 设计模式课程 设计模式精讲 3-10 里氏替换原则coding

    1 代码演练 1.1 继承关系判别(是否是真正意义的继承) 1.2 入参控制 1.3 出参控制 1 代码演练 1.1 继承关系判别(是否是真正意义的继承)(其实我觉得这个例子有点牵强) 1.1.1 反 ...

  9. 设计模式课程 设计模式精讲 3-8 迪米法特原则讲解及Coding

    1 课程讲解 1.1 定义 1.2 特质 1.3 重点 2 代码演练 2.1 反例 2.2 正例 1 课程讲解 1.1 定义 定义:一个对象应该对其他对象保持最少的了解.又叫最少知道原则. 1.2 特 ...

随机推荐

  1. VS Code的git配置

    最近打算使用VS Code作为python的编辑器,这里记录一下VS Code中git的配置方法 因为vscode中git只是使用本地的git,所以本地必须先安装git才行. 1.git的安装 git ...

  2. Sqoop的安装及常用命令

    本次安装主要是为了离线分析数据清洗完成后的操作:网站日志流量分析系统之数据清洗处理(离线分析) 一.概述 1. sqoop是Apache 提供的工具,用于hdfs和关系型数据库之间数据的导入和导入 2 ...

  3. 在HTML中实现两个div并排显示

    在HTML中让两个div并排显示,通常情况下有三种实现方式,包括: (1)设置为行内样式,display:inline-block (2)设置float浮动 (3)设置position定位属性为abs ...

  4. mvn 搭建临时仓库批量下载依赖jar包

    1.新建文件夹temp,在temp下新建setup.bat ,pom.xml 2.编辑setup.bat 和pom.xml bsetup.bat call mvn -f pom.xml depende ...

  5. 「CF241E」Flights

    传送门 Luogu 解题思路 首先对于所有不属于任何一条路径上的边,它的权值是任意的. 对于所有在路径上的边 \((u,v)\) 满足 \(1\le dis_v-dis_u\le2\) 差分约束即可. ...

  6. VMware15下载、安装、激活

    1.VMware15下载 链接:https://pan.baidu.com/s/1bI8LReRY-5k81O3rrNgg-A  提取码:6c03 2.VMware15安装 3.VMware15激活

  7. 浅谈python中__str__和__repr__的区别

    很多时候我们在创建一个类的时候,在终端打印类或者查看的时候一般都不会得到一个太满意的结果 class T: def __init__(self): self.color="red" ...

  8. 【代码总结】MYSQL数据库的常见操作

    ============================== MYSQL数据库的常见操作 ============================== 一.mysql的连接与关闭 -h:指定所连接的服 ...

  9. DOCK-SWARM

    服务原理: 创建集群:建立ingress网络,网关xxxxx.xxx.xxx.1 管理节点:docker swarm init --advertise-addr 192.168.4.119 工作节点: ...

  10. 【SSM 项目】实战总结

           项目源代码