大话设计模式_适配器模式(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 defence();
8
9 }

Forward类:


 1 package com.longsheng.adapter;
2
3 public class Forward extends AbstractPlayer {
4
5 private String name;
6
7 public Forward( String name ) {
8 this.name = name;
9 }
10
11 @Override
12 public void attack() {
13 System.out.println("前锋:" + name + ",进攻");
14 }
15
16 @Override
17 public void defence() {
18 System.out.println("前锋:" + name + ",防守");
19 }
20
21 }

Guard类:


 1 package com.longsheng.adapter;
2
3 public class Guard extends AbstractPlayer {
4
5 private String name;
6
7 public Guard( String name ) {
8 this.name = name;
9 }
10
11 @Override
12 public void attack() {
13 System.out.println("后卫:" + name + ",进攻");
14 }
15
16 @Override
17 public void defence() {
18 System.out.println("后卫:" + name + ",防守");
19 }
20
21 }

Translator类(适配器):


 1 package com.longsheng.adapter;
2
3 public class Translator extends AbstractPlayer {
4
5 private Center mCenter;
6
7 public Translator( String name ) {
8 mCenter = new Center(name);
9 }
10
11 @Override
12 public void attack() {
13 mCenter.myAttack();
14 }
15
16 @Override
17 public void defence() {
18 mCenter.myDefence();
19 }
20
21 }

Center(需要适配的类)类:


 1 package com.longsheng.adapter;
2
3 public class Center {
4
5 private String name;
6
7 public Center( String name ) {
8 this.name = name;
9 }
10
11 public void myAttack() {
12 System.out.println("我是中锋: " + name + ",我要抢板和内线进攻");
13 }
14
15 public void myDefence() {
16 System.out.println("我是中锋: " + name + ",我要盖帽和防守");
17 }
18 }

客户端类:


 1 package com.longsheng.adapter;
2
3 public class Client {
4
5 public static void main(String[] args) {
6 AbstractPlayer[] team = new AbstractPlayer[3];
7 team[0] = new Forward("小李");
8 team[1] = new Guard("小郭");
9 team[2] = new Translator("小黎");
10
11 for (AbstractPlayer player : team) {
12 player.attack();
13 player.defence();
14 }
15 }
16
17 }

运行结果:


1 前锋:小李,进攻
2 前锋:小李,防守
3 后卫:小郭,进攻
4 后卫:小郭,防守
5 我是中锋: 小黎,我要抢板和内线进攻
6 我是中锋: 小黎,我要盖帽和防守

要使用一个已经存在的类,如果它的接口,也就是它的方法和你要求的不相符时,可以考虑使用适配器模式,这样客户端可以统一调用同一接口。另外,需要注意,适配器只在双方都不太容易修改的时候再使用,而不是一开始有不同就使用。

适配器模式主要应用于希望复用一些现存的类,但接口又与复用环境要求不一致的情况

大话设计模式_适配器模式(Java代码),布布扣,bubuko.com

时间: 2024-10-10 16:10:13

大话设计模式_适配器模式(Java代码)的相关文章

大话设计模式_观察者模式(Java代码)

观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使他们自己能够自动更新自己.简单描述:1个Subject类(可以是抽象类可以是接口),可以有多个具体Subject类(继承抽象Subject),此具体Subject持有多个观察者的引用,在此具体Subject状态发生变化的时候调用这些观察者的相应方法.另外,这些持有的引用是抽象的,不是具体的,而这些引用所指向的对象时具体的观察者(即需要作出更新的具体观察者,这些具体

大话设计模式_装饰模式(Java代码)

装饰模式:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活. 简单描述:1一个父类A(主要给各具体装饰者可以设置待装饰对象),1个具体待装饰类(继承于父类A),1个抽象装饰者(继承父类A),多个具体装饰者(继承抽象装饰者).装饰者持有父类A的引用,每个装饰者在调用方法时都先调用持有的引用的对应方法,另外可在方法中再添加自己的功能(貌似描述得比较复杂,其实就是一传一,每个中间者都可以添加自身的功能) 大话设计模式中的截图: Component是定义一个对象接口,可以给

大话设计模式_单例模式(Java代码)

单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 简单描述:构造函数设置为private,以禁止外部类实现本类.本类中提供一个静态方法返回一个本例对象(注意多线程中的实现) 大话设计模式中的截图: 代码例子: Singleton类: 1 package com.longsheng.singleton; 2 3 public class Singleton { 4 5 private static Singleton instance = null; 6 private stati

大话设计模式_备忘录模式(Java代码)

备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 简单描述:一个Memento类,代表Originator中要备份的属性.Originator负责生成备份和还原备份,CareTaker负责存储备份 大话设计模式中的截图: 例子代码: Memento类: 1 package com.longsheng.memento; 2 3 public class Memento { 4 5 private String sta

大话设计模式_解释器模式(Java代码)

解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 简单描述:一个AbstractExpression类,多个子类,存在一个Interpret方法,转义Context对象的信息.客户端根据信息实例化不同的Expression类,并调用其转义方法(这个过程可以使用简单工厂+反射进行) 大话设计模式中的截图: 代码例子: 假设HTML代码解释器: (1)第一类标签<HTML>(开始)/<HEAD>(头信息)/<BODY&g

大话设计模式_原型模式(Java代码)

原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 简单描述:即通过实现接口Cloneable重写方法clone(),使得创建新的拷贝对象不需要一个成员一个成员的重新复制,而且可以提高创建对象的效率 Java中要想实现拷贝使用clone()方法,类必须实现Cloneable接口,并且重写Object类中的clone()方法,调用父类的clone()方法即可实现浅复制 代码如下: WorkExperience类: 1 package com.longsheng.prototy

大话设计模式_模板方法模式(Java代码)

模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 简单描述:多个类的行为是差不多的,只是某些局部不一样,则交由父类中抽象出这些子类中相同的部分,父类中定义出不同的部分的接口(方法),这些不同部分的方法则由子类去实现,通过多态,实现代码的重用 大话设计模式中的截图: 例子代码: AbstractClass类: 1 package com.longsheng.templatemethod; 2 3 public

大话设计模式_简单工厂模式(Java代码)

简单的描述:一个父类.多个子类,实例化那个子类由一个单独的工厂类来进行 图片摘自大话设计模式: 运算类: 1 package com.longsheng.simpleFactory; 2 3 public class Calculate { 4 5 private double firstNum; 6 private double secondNum; 7 8 public double getFirstNum() { 9 return firstNum; 10 } 11 12 public v

大话设计模式_状态模式(Java代码)

状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 简单描述:一个Context类(存有一个抽象状态State引用),调用状态类的方法.State的具体类方法中会判断Context类的状态(如时间),满足一个状态则执行相应动作,否则把Context的State引用指向下一个状态类,由下一个状态类决定相应行为 大话设计模式中的截图: 例子代码: Work类(Context): 1 package com.longsheng.state; 2 3 public cla