<十三>读<<大话设计模式>>之适配器模式

其实我感觉这个模式是最简单的一个设计模式了,看着名字可能不明白,其原来就是一个接口。比如电脑的USB接口,内部不管外部插得什么设备只要连接USB,内部都能接收到信号,原因就是两设备之间多了个桥梁------USB。

适配器模式:将一个类的接口转换成客户希望的另一个接口。它使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

<<大话设计模式>>是以NBA球员在外国培训不懂外语,而需要翻译者来帮其翻译,那这个翻译者就是接口了。好啰嗦啊,还是用代码解释一切,因为程序员就是活在代码的世界里。

1、运动员抽象类

/**

* @author jzhf

* 2014-11-05

*/

public
abstract class
Player {

public String
name;

public
abstract void
attack();//进攻

public
abstract void
defense();//防守

public String getName() {

return
name;

}

public
void
setName(String name) {

this.name = name;

}

}

2、前锋类

public
class
Forward extends Player {

public Forward(String name){

super.name = name;

}

/* (non-Javadoc)

* @seecom.test.model.adapter.Player#attack()

*/

@Override

public
void
attack() {

// TODO Auto-generatedmethod stub

System.out.println(name+"前锋攻击");

}

/* (non-Javadoc)

* @seecom.test.model.adapter.Player#defense()

*/

@Override

public
void
defense() {

// TODO Auto-generatedmethod stub

System.out.println(name+"前锋防守");

}

}

3、防守类

/**

* @author jzhf

* 2014-11-05

* 注意不再继承player类,因为需要翻译

*/

public
class
ForeignCenter{

public String
name;

public
void
attack() {

// TODO Auto-generatedmethod stub

System.out.println(name+"外籍中锋攻击");

}

public
void
defense() {

// TODO Auto-generatedmethod stub

System.out.println(name+"外籍中锋防守");

}

public String getName() {

return
name;

}

public
void
setName(String name) {

this.name = name;

}

}

4、翻译者类

/**

* @author jzhf

* 2014-11-05

* 翻译者作为player与外籍队员的接口,所以翻译者应该继承player,但是执行的动作还是外籍球员的动作

*/

public
class
Translator extends Player {

private ForeignCenter
center = new ForeignCenter();

public Translator(String name){

center.setName(name);

}

/* (non-Javadoc)

* @seecom.test.model.adapter.Player#attack()

*/

@Override

public
void
attack() {

// TODO Auto-generatedmethod stub

center.attack();

}

/* (non-Javadoc)

* @seecom.test.model.adapter.Player#defense()

*/

@Override

public
void
defense() {

// TODO Auto-generatedmethod stub

center.defense();

}

}

5、客户端

public
class
AdapterClient {

/**

* @param args

*/

public
static void
main(String[] args) {

// TODO Auto-generatedmethod stub

Player player1 = new Forward("巴蒂尔");

player1.attack();

player1.defense();

Player player2 = new Translator("姚明");

player2.attack();

player2.defense();

}

}

翻译者就是外国语姚明的中间人,为了让姚明听懂外语就需要这样的接口还适应外国的环境。这就是适配器模式,简单吧!

总结:适配器模式简单的说就是需要的东西就在面前,但却不能使用,而短时间又无法改造它,于是我们就想办法适配它。当我们使用一个已经存在的类,但如果它的接口,也就是它的方法和你的要求不相同时,就应该考虑用适配器模式了。

时间: 2024-10-05 16:14:29

<十三>读<<大话设计模式>>之适配器模式的相关文章

大话设计模式_适配器模式(Java代码)

适配器模式:将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 简单描述: 大话设计模式中的截图: 代码例子: AbstractPlayer类: 1 package com.longsheng.adapter; 2 3 public abstract class AbstractPlayer { 4 5 public abstract void attack(); 6 7 public abstract void defenc

&lt;二&gt;读&lt;&lt;大话设计模式&gt;&gt;之策略模式

又和大家见面了,能够坚持写出第二篇文章真不错,好好加油. <<大话设计模式>>讲解策略模式是以商场收银软件程序开头的,那么问题来了,哪家商场收银软件强,开玩笑了.读过上篇文章<<简单工厂模式>>的知道,它有两个缺点:1.客户端依赖两个类,耦合性高:2.如果算法过多则需要写很多类.解决上面问题的就是策略模式了. 策略模式:它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户. 商场收银软件:单价*打折算法=售价.

&lt;六&gt;读&lt;&lt;大话设计模式&gt;&gt;之原型模式

原型模式也是很简单的一种模式,对于java来说已经有相应的接口了(Cloneable).关于原型模式<<大话设计模式>>是以投放简历作为例子讲解的,即我要投放很多简历,其实每个简历都一样,所以只要我写好一份,其他的复制就行了,其实就是今天讲的原型模式,就是把要复制的类对象的属性复制到另外一个对象上(其实不是复制而是对象的引用改变). 原型模型:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 浅复制VS深复制 关于克隆有两个概念 浅复制:就是只复制值类型的字段,不能

&lt;七&gt;读&lt;&lt;大话设计模式&gt;&gt;之模板模型

哈哈,真没想到,不知不觉已经写到第七篇文章了,看来本人还是很有毅力的.其实坚持一件事很简单,只要你每天不断的朝着自己的目标出发,任何事情都不会挡着你.好了大道理不多说,谁都懂,那看看这个模板模式大家懂不懂了. 对于模板模式可能听起来很吓人,其实大家都用过,只是不知道罢了,也很简单.从字面意思上看就是我写出一个模板,然后其他类直接继承它就可以拥有模板类中的东西了,听起来像继承的定义,是的,就像现在开发一个论坛,为了能够开发速度更快,我们通常就是网上找一个模板下载下来,然后在模板基础上进行二次开发,

&lt;一&gt;读&lt;&lt;大话设计模式&gt;&gt;之简单工厂模式

工厂模式虽然简单,但是写下这篇文章却不简单.第一:本人经过内心的挣扎后才决定开始写博文的,为什么呢,因为好长时间没有写了,对自己的文学功底也是好不自信,但是技术这东西你不写出来你真不知道自己掌握多少,或者是否掌握其本质:第二:老婆怀孕了,没时间写了,但是我还是挤出时间开始写,于是这篇文章在这样的环境下成了,以后还有后续的文章,谢谢关注! 为什么从设计模式开始学习呢?其实以前对设计模式有些了解,但是用不到也就没有深入,现在差不多也忘完了,本人工作三年了,对一些大众上的技术(比如struts2.sp

&lt;九&gt;读&lt;&lt;大话设计模式&gt;&gt;之建造者模式

学习了这么多模式,其实回想一下其实也没什么,就是用不同的方式设计代码,保证代码的可扩展性.复用等,稍微对代码进行一下修改就是另外一种模式.在我们工作中其实已经用了很多模式了,只不过不知道或者没留意他叫什么而已,无所谓,只要会用一切都是浮云. 关于<<大话设计模式>>对建造者模式的讲解是以画一个人来作为例子讲解的.人分为高人.矮人.胖人.瘦人等,但都是人,但当你去画一个人的时候,画的过程都是稳定的,都需要画头.身子.手.脚,不同的是建造的细节是不一样的.所以如果你需要将一个复杂的构件

&lt;八&gt;读&lt;&lt;大话设计模式&gt;&gt;之外观模式

外观模式其实很好理解的,就是将表面的东西展示给人看,内部的东西你不知道的(因为已经封装好了),比如一个外部系统要和公司内部5个系统进行交互,而这5个系统之间也有交互,那么第一种就是外部系统和5个系统都进行交互:第二种就是做一个接口将外部系统需要的逻辑封装成一个方法,该方法中包含了关于5个系统的交互方式,这样外部系统就不用直接和5个系统交互了,直接调用接口完事.外观模式也叫门面模式,其实说白了就是把要用的东西封装起来使交互更加方便. 外观模式定义:为子系统中的一组接口提供一个一致的界面,此模式定义

&lt;十一&gt;读&lt;&lt;大话设计模式&gt;&gt;之抽象工厂模式

学习设计模式有一段时间了,对设计模式有一个体会,就是没那么难,就是设计程序遵循一些原则,让代码可复用,在修改的时候不用涉及太多的类,扩展方便,抽象工厂模式名字听起来抽象,但理解起来一点也不抽象,用语言可能不好理解,我喜欢通过代码理解,然后成为自己的东西. 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. <<大话设计模式>>以项目上线时想换另外一个数据库为例子展开的,假如我没原来用的是SqlServer,现在换成access,代码如下: 1.访问数

&lt;四&gt;读&lt;&lt;大话设计模式&gt;&gt;之代理模式

代理模式我想大家即便不熟悉也都听过吧,从字面意思上看就是替别人干活的,比如代理商.在项目的实际应用中也有很多地方用到,比如spring通过代理模式生成对象等. 代理模式的书面定义:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 在<<大话设计模式>>一书中以一个有男朋友的女孩让"小菜"帮忙修电脑的故事展开的,其实说白了代理就是帮别人干活的,一般老板不出面,