构建模式--Adapter模式(JAVA)

适配器模式:

适配器就相当于我们的转接头,比如手机充电器插头(小米和华为的手机充电器不能共用,这时候就可以给华为的充电器按一个转接头,就可以给小米手机充电)。

同理,当一个类(充电器 HuaweiCharger)实现了某一个接口(华为 HuaweiPhone),但有时我们又需要去实现另一个接口(小米 XiaomiPhone),如果直接让充电器去实现小米接口,就需要实现小米接口中的方法,如果充电器类已经被打到一个包中,这时候修改就比较困难,也违反开闭原则(扩展开,修改闭)。因此我们就需要建立一个适配器类(HTXAdapter Huawei Transform Xiaomi Adapter)去实现小米接口,同时又继承自充电器类。

 1 /**
 2  * 华为手机接口
 3  *
 4  * @author DennyZhao
 5  * @date 2017年6月20日
 6  * @version 1.0
 7  */
 8 public interface HuaweiPhone {
 9
10     public int getSquarePlug();
11
12     public int getSquareInterface();
13
14     public void getAndroidSys();
15
16     public void getHuaweiInput();
17
18     public void getInterCpu();
19
20     public void getInterBoard();
21
22 }

HuaweiPhone

 1 /**
 2  * 小米手机
 3  *
 4  * @author DennyZhao
 5  * @date 2017年6月20日
 6  * @version 1.0
 7  */
 8 public interface XiaomiPhone {
 9
10     public int getCirclePlug();
11
12     public int getCircleInterface();
13
14     public void getAndroidPlusSys();
15
16     public void getXiaomiInput();
17
18     public void getAMDCpu();
19
20     public void getAMDBoard();
21 }

XiaomiPhone

 1 /**
 2  * 华为充电器
 3  *
 4  * @author DennyZhao
 5  * @date 2017年6月20日
 6  * @version 1.0
 7  */
 8 public class HuaweiCharger extends HuaweiPhoneImpl implements HuaweiPhone{
 9
10     @Override
11     public int getSquarePlug() {
12         System.out.println("squarePlug----------");
13         return 0;
14     }
15
16     @Override
17     public int getSquareInterface() {
18         System.out.println("squareInterface----------");
19         return 0;
20     }
21
22
23 }

HuaweiCharger

 1 /**
 2  * description:设计原则讲究扩展开,修改闭。因此当我们需要将一个类去实现另一个接口时,可以通过创建子类去实现这个接口。
 3  *
 4  * @author DennyZhao
 5  * @date 2017年6月12日
 6  * @version 1.0
 7  */
 8 public class HTXAdapter extends HuaweiCharger implements XiaomiPhone{
 9
10     /**
11      * 小米适配
12      */
13     @Override
14     public int getCirclePlug() {
15         int a = super.getSquarePlug();
16         return a+ 5;
17     }
18
19     /**
20      * 小米适配
21      */
22     @Override
23     public int getCircleInterface() {
24         int b = super.getSquareInterface();
25         return b + 4;
26     }
27         @Override
28     public void getAndroidPlusSys() {
29         // TODO Auto-generated method stub
30
31     }
32
33     @Override
34     public void getXiaomiInput() {
35         // TODO Auto-generated method stub
36
37     }
38
39     @Override
40     public void getAMDCpu() {
41         // TODO Auto-generated method stub
42
43     }
44
45     @Override
46     public void getAMDBoard() {
47         // TODO Auto-generated method stub
48
49     }
50
51 }

HTXAdapter

通过上面的代码就可以知道,HTXAdaper实现了Xiaomi接口的所有方法,这样就不会污染HuaweiCharger了。随时不用可以去掉。插拔式结构。

时间: 2024-08-09 11:35:12

构建模式--Adapter模式(JAVA)的相关文章

Abstract Server模式,Adapter模式和Bridge模式

简易的台灯 Abstract Server模式 谁拥有接口. 接口属于它的客户,而不是它的派生类. 接口和客户之间的逻辑关系,强于接口和其派生类的逻辑关系. 逻辑关系和实体关系的强度是不一致的.在实体关系上,继承比依赖更强. 最好将接口和它的客户打包,而不是和它的派生类在一起. Adapter模式 当Light不能继承Switchable接口时(第三方代码). Modem Client仍然看到的是期望的连接行为,而Ded User不必去调用根本无用的Dial/Hangup(). 仍然存在杂凑体.

Adapter模式

Adapter模式 类模式 对象模式 Adapter模式 在软件开发过程中,经常会使用第三方库.如果使用第三方库,那么我们对客户提供的接口和第三方库的接口不一致时,应该怎么解决.这是Adapter模式要解决的问题.即把一个类的接口转化为客户希望的接口. Adatper模式的实现这里给出2中模式:类模式和对象模式. 类模式中,Adapter类继承和复用Adaptee的接口:而对象模式中,Adapter采用组合的方式来调用Adaptee中的接口. 类模式中,类的结构如下: 下面给出实现: 类模式 /

图解设计模式之Adapter模式

什么是Adapter模式  Adapter模式即适配器模式,对于适配器的理解参考现实生活中把交流电转换成直流电的电源适配器,用于填补现有的程序和所需的程序之间差异的设计模式就是Adapter模式,有以下两种实现方式: 1. 类适配器模式(使用继承的适配器) 2. 对象适配器模式(使用委托的适配器)所谓继承和委托的区别在哪呢?委托是指将某个方法中的实际处理交给其他实例的方法,继承则是自己进行处理,下面分别看下两种实现方式: 代码清单 这里有一个需要被适配的Banner类 /** * 被适配角色:交

java演示适配器(adapter)模式

为什么要使用模式: 模式是一种做事的一种方法,也即实现某个目标的途径,或者技术. adapter模式的宗旨就是,保留现有类所提供的服务,向客户提供接口,以满足客户的需求. 类适配器:客户端定义了接口并实现了这个接口,这个接口中的方法在自己的类库中有更好的实现方式,但是方法名不一样,不能为用户所用,可以定义一个类实现这个接口,这个接口中的方法可以委托给自己类库中的方法实现效果,以满足客户的需求.这种方式叫做接口适配. // 已存在的.具有特殊功能.但不符合我们既有的标准接口的类 class Ada

Java 实现适配器(Adapter)模式

平时我们会常常碰到这种情况,有了两个现成的类,它们之间没有什么联系.可是我们如今既想用当中一个类的方法.同一时候也想用另外一个类的方法.有一个解决方法是.改动它们各自的接口.可是这是我们最不愿意看到的.这个时候Adapter模式就会派上用场了 适配器 模式 有三种方式,一种是对象适配器,一种是类适配器, 一种是接口适配器 下面举例说明: 类适配器 类图 public class DrawRectangle {//画方 public void drawRectangle(String msg) {

设计模式之Adapter模式

说起Adapter,STL里的stack和queue都是adapter,底层是deque,隐藏了deque的一些接口,使得其可以达到FIFO是queue,LIFO是stack. The STL stack is a container adaptor. That is, it is not a "first-class" container, but instead simply "adapts" one of the sequential first-class

java设计模式--行为型模式--命令模式

1 命令模式 2 概述 3 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤消的操作. 4 5 6 适用性 7 1.抽象出待执行的动作以参数化某对象. 8 9 2.在不同的时刻指定.排列和执行请求. 10 11 3.支持取消操作. 12 13 4.支持修改日志,这样当系统崩溃时,这些修改可以被重做一遍. 14 15 5.用构建在原语操作上的高层操作构造一个系统. 16 17 18 参与者 19 1.Command 20 声明执行操作的接口.

适配器模式(Adapter模式)

什么是适配器模式? 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 适配器模式中的角色 目标接口(Traget):客户所期待的接口.目标可以是具体的或抽象的类,也可以是接口. 需要适配的类(Adaptee):需要适配的类或者适配者类. 适配器:通过包装一个需要适配的对象,把原接口转换成目标接口. 首先创建Adaptee类,即需要被适配的对象: package com.note.adapter; /*** * 被适配的类

Java设计模式(十) 备忘录模式 状态模式

(十九)备忘录模式 备忘录模式目的是保存一个对象的某个状态,在适当的时候恢复这个对象. class Memento{ private String value; public Memento(String value){ this.value = value; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } } class Storage