您的位置:首页 > 其它

大话设计模式之适配器模式

2013-08-12 21:34 155 查看
适配器模式,将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

简单地说,就是需要的东西就在面前,但却不能使用,而短时间又无法改造它,于是我们就想办法适配它。

系统的数据和行为都正确,但接口不符时,我们应该考虑适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。

适配器模式包括类适配器模式(用于多继承)和对象适配器模式(主讲)



Adapter类持有Adaptee对象,request方法中调用Adaptee对象的方法



package Adapter;

public class MainClass {

public static void main(String[] args) {
// TODO Auto-generated method stub
Player b = new Forwards("baDiEr");
b.attack();

Player m = new Guards("maiDi");
m.attack();

Player ym = new Translator("yaoMing");
ym.attack();
ym.defense();
}

}

abstract class Player {
protected String name;
public Player(String name) {
this.name = name;
}
public abstract void attack();
public abstract void defense();
}

class Forwards extends Player {
public Forwards(String name) {
super(name);
}

@Override
public void attack() {
// TODO Auto-generated method stub
System.out.println("Forwards attack"+name);
}

@Override
public void defense() {
// TODO Auto-generated method stub
System.out.println("Forwards defense"+name);
}
}

class Center extends Player {
public Center(String name) {
super(name);
}

@Override
public void attack() {
// TODO Auto-generated method stub
System.out.println("Center attack"+name);
}

@Override
public void defense() {
// TODO Auto-generated method stub
System.out.println("Center defense"+name);
}
}

class Guards extends Player {
public Guards(String name) {
super(name);
}

@Override
public void attack() {
// TODO Auto-generated method stub
System.out.println("Guards attack"+name);
}

@Override
public void defense() {
// TODO Auto-generated method stub
System.out.println("Guards defense"+name);
}
}

class ForeignCenter {
private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
public void fAttack() {
System.out.println("ForeignCenter attack " + name);
}
public void fDefense() {
System.out.println("ForeignCenter defense " + name);
}
}

class Translator extends Player {
private ForeignCenter wjzf = new ForeignCenter();

public Translator(String name) {
super(name);
wjzf.setName(name);
}

@Override
public void attack() {
// TODO Auto-generated method stub
wjzf.fAttack();
}

@Override
public void defense() {
// TODO Auto-generated method stub
wjzf.fDefense();
}

public ForeignCenter getWjzf() {
return wjzf;
}

public void setWjzf(ForeignCenter wjzf) {
this.wjzf = wjzf;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: