一:类适配器模式
假如我们有一个Person类,这个Person类中有吹,拉方法。在系统开发到一半我们发现我们需要该类再添加两个方法弹、唱,以便实现吹、拉、弹、唱的功能。但纵观全系统,弹、唱功能只是临时使用的一次。并且Person类在全系统中已经设计合理,我们不想再去改变该类的行为。这个时候怎么办呢?别急,类适配器模式可以解决此类问题。
也许你会说,为什么不直接在“源”中直接添加方法,答案是,
适配是为了实现某种目的而为一个源类暂时性的加上某种方法,所以不能破坏原类的结构。同时不这么做也符合Java的高内聚,低耦合的原理。既然不能直接加,接着我们就来说该怎么来实现为人这个Person“源”添加弹、唱方法,而又不破坏“源”的本身结构。下面粘上源代码:
1,类适配器的目标功能(用接口来实现目标功能)
package com.supan.shipeiqi;
public interface Target {
//这是类适配器模式中的目标实现接口
public void chui();
public void la();
public void tan();
public void chang();
}
2,普通的类Person,该类在日常使用中需要添加一些方法,但又不想改变此类。
package com.supan.shipeiqi;
public class Person {
private String name;
private int age;
public void chui(){
System.out.println("我会吹,来自源对象的方法");
}
public void la(){
System.out.println("我会拉,来自源对象的方法");
}
}
3,
适配器类,该类以Person为基础,在此基础上添加一些需要的方法,注意该类集成了
Person也就是说,该类是Person的子类,拥有了Person的所有属性,可以任意操纵Person
的属性,所以在此类中添加一些方法也就可以随意增加Person行为,实现适配的目标,这
个类也是类适配器模式中经典核心类
package com.supan.shipeiqi;
public class PersonAdapter extends Person implements Target {
public void tan() {
System.out.println("我会弹,来自适配器中的方法");
}
public void chang() {
System.out.println("我会唱,来自适配器中的方法");
}
}
4,测试类
package com.supan.shipeiqi;
public class ClassAdapterTest {
public static void main(String[] args) {
PersonAdapter pd = new PersonAdapter();
pd.chui();
pd.la();
pd.tan();
pd.chang();
}
}
5,打印结果
我会吹,来自源对象的方法
我会拉,来自源对象的方法
我会弹,来自适配器中的方法
我会唱,来自适配器中的方法
代码看完然后要做一些说明了,为什么称其为类适配模式呢?很显然的,Adapter类继承了Person类,而在Java这种单继承的语言中也就意味着,他不可能再去继承其他的类了,这样也就是这个适配器只为Person这一个类服务。所以称其为类适配模式。
说完类的适配模式,开始说第2种对象的适配器模式了。对象适配器模式是把“源”作为一个对象聚合到适配器类中。
二:对象适配器模式
1,目标接口
package com.supan.shipeiqi;
public interface Target {
//这是类适配器模式中的目标实现接口
public void chui();
public void la();
public void tan();
public void chang();
}
2,Person源类
package com.supan.shipeiqi;
public class Person {
private String name;
private int age;
public void chui(){
System.out.println("我会吹,来自源对象的方法");
}
public void la(){
System.out.println("我会拉,来自源对象的方法");
}
}
3,对象适配器类,该类是核心类(注意与类适配器类的区别)
package com.supan.shipeiqi;
public class PersonAdapter2 implements Target {
private Person p;
public PersonAdapter2(Person p) {
this.p = p;
}
public void chui() {
p.chui();
}
public void la() {
p.la();
}
public void tan() {
System.out.println("我会弹,该方法来自适配器");
}
public void chang(){
System.out.println("我会唱,该方法来自适配器");
}
}
4,测试类:
package com.supan.shipeiqi;
public class ObjectAdapterTest {
public static void main(String[] args) {
Person p = new Person();
PersonAdapter2 pa2 = new PersonAdapter2(p);
pa2.chui();
pa2.la();
pa2.tan();
pa2.chang();
}
}
5,输出:
我会吹,来自源对象的方法
我会拉,来自源对象的方法
我会弹,该方法来自适配器
我会唱,该方法来自适配子
三:关于类适配器模式、对象适配器模式的一点思考:
1.类的适配模式用于单一源的适配,由于它的源的单一话,代码实现不用写选择逻辑,很清晰;而对象的适配模式则可用于多源的适配,弥补了类适配模式的不足,使得原本用类适配模式需要写很多适配器的情况不复存在,弱点是,由于源的数目可以较多,所以具体的实现条件选择分支比较多,不太清晰。
2.适配器模式主要用于几种情况:
(1)系统需要使用现有的类,但现有的类不完全符合需要。
(2)讲彼此没有太大关联的类引进来一起完成某项工作(指对象适配)。
分享到:
相关推荐
适配器模式的Java实现版本,包含类适配器模式和对象适配器模式的实现,同时也包含两者的UML类图
设计模式之适配器模式Java版 设计模式之适配器模式Java版 设计模式之适配器模式Java版 设计模式之适配器模式Java版
什么是抽象:抽象是处理对象复杂性的一种技术,它只关注对象的主要细节而忽略了对象的次要细节。
java设计模式之适配器模式,希望对大家有所帮助。
为三类: 类适配器模式、 对象适配器模式、 接口适配器模式。 以生活中手机充电为例来讲解适配器模式, 手机本身并不能直接用220V交流电, 需要将220V的交流电转换为5V的直流电, 在这个过程 中, 充电器本身相当于...
讲解面向对象开发模式之适配器模式。并举例说明类适配器与对象适配器的用法与区别。
C#设计模式之适配器模式应用实例
动态代理模式 适配器模式 实现,都可以运行,有一部分注解
适配器模式代码demo 适配器模式代码demo 适配器模式代码demo
抽象类与适配器模式 抽象类与适配器模式 视频讲解+ppt讲稿
* 适配器模式,会产生新的类和方法:比如 ,电源适配器(手机、电脑、空调),内部结构基本一致,只是转后的产出的电压不同 * 适配器模式,适配现有的类与方法,最终产出的是满足需求的新的接口方法 * 特点:复用...
适配器(Adaper)角色public class Adapter extends Adaptee implements Target { /** * 由于源类
Java设计模式适配器模式,组成模式、外观模式代码架构
适配器模式是一种结构型设计模式。适配器模式的思想是:把一个类的接口变换成客户端所期待的另一种接口
iOS 设计模式 适配器模式
设计模式适配器模式PPT学习教案.pptx
Java设计模式之适配器模式
设计模式的适配器模式的例子,希望对大家有用