《大话设计模式》第十七章
package ch17;
public abstract class Player {
protected String name;
public Player(String name) {
this.name = name;
}
public abstract void attack();
public abstract void defense();
}
package ch17;
public class Forwards extends Player {
public Forwards(String name) {
super(name);
}
@Override
public void attack() {
System.out.println("前锋" + name + "进攻");
}
@Override
public void defense() {
System.out.println("前锋" + name + "防守");
}
}
package ch17;
public class Center extends Player {
public Center(String name) {
super(name);
}
@Override
public void attack() {
System.out.println("中锋" + name + "进攻");
}
@Override
public void defense() {
System.out.println("中锋" + name + "防守");
}
}
package ch17;
public class Guards extends Player {
public Guards(String name) {
super(name);
}
@Override
public void attack() {
System.out.println("后卫" + name + "进攻");
}
@Override
public void defense() {
System.out.println("后卫" + name + "防守");
}
}
package ch17;
public class ForeignCenter {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void jingong() {
System.out.println("外籍中锋" + name + "进攻");
}
public void fangshou() {
System.out.println("外籍中锋" + name + "防守");
}
}
package ch17;
public class Center extends Player {
public Center(String name) {
super(name);
}
@Override
public void attack() {
System.out.println("中锋" + name + "进攻");
}
@Override
public void defense() {
System.out.println("中锋" + name + "防守");
}
}
package ch17;
public class Translator extends Player {
private ForeignCenter fc = new ForeignCenter();
public Translator(String name) {
super(name);
fc.setName(name);
}
@Override
public void attack() {
fc.jingong();
}
@Override
public void defense() {
fc.fangshou();
}
}
package ch17;
/**
* 适配器模式
* @author Administrator
*
*/
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
Player a = new Forwards("巴蒂尔");
Player b = new Guards("麦迪");
Player c = new Translator("姚明");
a.attack();
b.attack();
c.attack();
c.defense();
}
}
适配器模式,其实就是改一下方法的名字,但是这不是随便改,而是改成客户想要的名字。
桥接模式和适配器模式很像,它们有什么区别吗?
桥接模式:先规定接口,再让客户去实现这些接口。比如规定java.sql.Connection,oracle就必须实现java.sql.Connection这个接口。
适配器模式:已经定义了接口,但是和客户要的接口不一致,于是新增接口,用新接口去调用旧的接口。为什么不直接把旧接口改为新接口?因为要保持兼容性啊。比如原来的方法叫method1,现在改为method2,但是其他调用的地方,还是method1,于是就会报找不到method1这个方法。