《大话设计模式》第十七章
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这个方法。