`
zzq19860626
  • 浏览: 261146 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
B20df9e2-fb3d-3644-9f72-c1619842f682
设计模式学习笔记
浏览量:178051
87eaf24f-812a-3463-8e65-e3197d2ad8c2
java虚拟机
浏览量:26211
社区版块
存档分类
最新评论

JAVA设计模式学习11——适配器模式

阅读更多

适配器(adapter)模式,把一个类的接口变成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

适配器模式有两种形式,的适配器模式和对象的适配器模式。我们先看类的适配器模式,类的适配器模式有以下角色:

目标(Target)角色:是期待得到的接口类型。这里谈类的适配器模式所以这个不能是类,原因是java单继承。

源(adaptee)角色:现有待适配的接口类型。

适配器(adapter)角色:适配器类模式的核心,这个角色负责把源接口转换成目标角色的接口。

类的适配器模式类图:

通过上图可以看出,组合对象Adapter持有源Adaptee的对象,利用聚合代替了继承,在Adapter里面的代码如下编写:  

package adapter;
/**
 * 
 *作者:alaric
 *时间:2013-7-21下午6:44:53
 *描述:目标类
 */
public interface Target {

	public void operate1();
	
	public void operate2();
}
package adapter;
/**
 * 
 *作者:alaric
 *时间:2013-7-21下午6:44:29
 *描述:源
 */
public class Adaptee {

	public void operate1(){
		//业务逻辑
	}
}
package adapter;
/**
 * 
 *作者:alaric
 *时间:2013-7-21下午6:44:05
 *描述:适配器类
 */
public class Adapter extends Adaptee implements Target{

	@Override
	public void operate2() {
		// 业务逻辑
		
	}

}

 适配器类继承了源类,实现了目标类在源里没有的接口,达到了适配转换作用。java是单继承的语言,这种类的适配模式往往受到使用环境的限制,在面向对象设计原则中,有一条叫做组合/聚合复用原则,讲的是尽可能使用组合和聚合达到复用的目的而不是继承,所以一般推荐用对象适配器模式达到目的,对象适配器的角色和类的适配器模式的角色没什么具体的区别,只是类图不同,对象适配器模式的类图如下:

通过上图可以看出,组合对象Adapter持有源Adaptee的对象,利用聚合代替了继承,在Adapter里面的代码如下编写: 

 

package adapter;
/**
 * 
 *作者:alaric
 *时间:2013-7-21下午6:44:05
 *描述:适配器类
 */
public class Adapter2 implements Target{

	private Adaptee adaptee;
	
	public Adapter2(Adaptee adaptee) {
		super();
		this.adaptee = adaptee;
	}

	@Override
	public void operate2() {
		// 业务逻辑
	}

	@Override
	public void operate1() {
		//调用源的方法
		adaptee.operate1();
		
	}

}

 为了不改变原有系统的实现而对目标接口需求的满足而做适配,利用具体的类的适配器模式还是对象的适配器模式,要根据具体的业务场景,如果两种都可以的话最好选择对象的适配器模式,适配器模式使得原本不能在一起工作的类在一起工作成为可能。但是对于变化很大的系统对每个接口都写一个适配器类变的很难维护,这时候应该考虑对原有代码的重构,而不是系统中存在大量的适配器类。 
 ps:最近重新学习设计模式,所写相关笔记纯属个人对书本和资料的理解,如有不到之处请大家指出,共同探讨学习设计模式。

 

 

设计模式系列目录:

 JAVA设计模式学习1——统一建模语言UML

JAVA设计模式学习2——面向对象设计原则

JAVA设计模式学习3——设计模式概述

JAVA设计模式学习4——简单工厂模式

JAVA设计模式学习5——工厂方法模式

JAVA设计模式学习6——抽象工厂模式

JAVA设计模式学习7——单例模式

JAVA设计模式学习8——建造模式

JAVA设计模式学习9——原型模式

JAVA设计模式学习10——组合模式

JAVA设计模式学习11——适配器模式

JAVA设计模式学习12——装饰器模式

JAVA设计模式学习13——代理模式

JAVA设计模式学习14——享元模式

JAVA设计模式学习15——门面模式

JAVA设计模式学习16——桥梁模式

JAVA设计模式学习17——策略模式

JAVA设计模式学习18——模版方法模式

JAVA设计模式学习19——观察者模式

JAVA设计模式学习20——责任链模式

JAVA设计模式学习21——命令模式

JAVA设计模式学习22——备忘录模式

JAVA设计模式学习23——状态模式

JAVA设计模式学习24——访问者模式

JAVA设计模式学习25——迭代器模式

  • 大小: 7.9 KB
  • 大小: 9.6 KB
4
0
分享到:
评论
4 楼 zzq19860626 2013-11-01  
QuarterLifeForJava 写道
博主,对于适配器模式请教个问题,不理解它的意义何在?
看你的Adapter2类,要测试它,代码这么写:
public class Test{

	public static void main(String[] args){
     
              Target t = new Adapter2(new Adaptee());
              t.operate1();

         }

}

那么为何不能这样呢?
Adaptee adaptee = new Adaptee();
adaptee.operate1();

它的核心不就是将对象写成属性吗?(private Adaptee adaptee;)为何还要搞个类弄的反而复杂呢? 

你这样就是直接调用源了,如果要调用operate2()不就没有了吗,适配器的目的是让适配源和适配目标一致。
3 楼 QuarterLifeForJava 2013-10-31  
博主,对于适配器模式请教个问题,不理解它的意义何在?
看你的Adapter2类,要测试它,代码这么写:
public class Test{

	public static void main(String[] args){
     
              Target t = new Adapter2(new Adaptee());
              t.operate1();

         }

}

那么为何不能这样呢?
Adaptee adaptee = new Adaptee();
adaptee.operate1();

它的核心不就是将对象写成属性吗?(private Adaptee adaptee;)为何还要搞个类弄的反而复杂呢? 
2 楼 zzq19860626 2013-08-23  
whfish 写道
这个是类适配器,还有一种对象适配器。

你可能没有读完整吧,两种我都有介绍的。
1 楼 whfish 2013-08-23  
这个是类适配器,还有一种对象适配器。

相关推荐

    浅析Java设计模式【2】——适配器

    浅析Java设计模式【2】——适配器

    Java设计模式 版本2

    Java设计模式,目录:前言,UML建模技术,深入浅出UML类图,从招式与内功谈起——设计模式概述,面向对象设计原则,工厂三兄弟之简单工厂模式,工厂三兄弟之工厂方法模式,工厂三兄弟之抽象工厂模式,确保对象的唯一...

    java设计模式

    目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 ...附录:23个设计模式

    设计模式——JAVA.docx

    JAVA设计模式总结之23种设计模式 一:设计模式之六大原则 总原则:开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。 1.Abstract Factory(抽象工厂模式) 2.Adapter(适配器模式)......

    design-pattern-java.pdf

    设计模式趣味学习(复习) 设计模式趣味学习(复习) 设计模式与足球(一) 设计模式与足球(二) 设计模式与足球(三) 设计模式与足球(四) 设计模式综合应用实例 设计模式综合应用实例 多人联机射击游戏 多人...

    深入浅出设计模式(中文版电子版)

    4.4.2现实中的装饰模式——相架 126 4.4.3C#实例——图书馆中的项目 127 4.4.4Java实例——自定义JButton 131 4.4.5优势和缺陷 133 4.4.6应用情景 134 4.5FacadePattern(外观模式) 134 4.5.1定义 134 4.5.2...

    深入浅出设计模式(中文版)

    4.4.2现实中的装饰模式——相架 126 4.4.3C#实例——图书馆中的项目 127 4.4.4Java实例——自定义JButton 131 4.4.5优势和缺陷 133 4.4.6应用情景 134 4.5FacadePattern(外观模式) 134 4.5.1定义 134 4.5.2...

    java和设计模式ppt教程

    java和设计模式ppt包含工厂模式、建造模式、原始模型模式、单例模式、结构模式、适配器、桥梁模式、合成模式、装饰模式、门面模式、享元模式、代理模式、行为模式、解释器模式、迭代子模式、调停者模式、备忘录模式...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷6

    综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷8

    综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷3

    (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象...

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    关于java程序员发展需要学习的路线整理集合 技术 应用技术 计算机基础知识 cpu mem disk net 线程,进程 第三方库 poi Jsoup zxing Gson 数据结构 树 栈 链表 队列 图 操作系统 linux 代码控制...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷1

    (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷9

    综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...

    设计模式Demo

    针对23种设计模式,分别写了demo并画了类图帮助理解。 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷10

    综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷5

    综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷7

    综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷2

    (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象...

Global site tag (gtag.js) - Google Analytics