一、适配器模式
适配器模式:将一个类的接口转换成客户希望的另外一个接口。这使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
//Target,客户所期待的接口
class Target {
public void Resquest() {
System.out.println("普通请求!");
}
}
//Adaptee,需要适配的类
class Adaptee {
public void SpecificRequest() {
System.out.println("特殊请求!");
}
}
//Adapter,通过在内部包装一个Adaptee对象,把源接口转换成目标接口
class Adapter extends Target {
private Adaptee adaptee = new Adaptee();
public void Rsquest() {
adaptee.SpecificRequest();
}
}
public class Main {
public static void main(String[] args) {
Target target = new Adapter();
target.Resquest();
}
}
二、篮球翻译适配器
abstract class Player { // 球员
protected String name;
public Player(String name) {
super();
this.name = name;
}
public abstract void Attack();
public abstract void Defense();
}
class Forwards extends Player { // 前锋
public Forwards(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void Attack() {
// TODO Auto-generated method stub
System.out.println("前锋" + name + "进攻");
}
@Override
public void Defense() {
// TODO Auto-generated method stub
System.out.println("前锋" + name + "防守");
}
}
class Center extends Player { // 中锋
public Center(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void Attack() {
// TODO Auto-generated method stub
System.out.println("中锋进攻" + name + "进攻");
}
@Override
public void Defense() {
// TODO Auto-generated method stub
System.out.println("中锋" + name + "防守");
}
}
class Guards extends Player { // 后卫
public Guards(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void Attack() {
// TODO Auto-generated method stub
System.out.println("后卫" + name + "进攻");
}
@Override
public void Defense() {
// TODO Auto-generated method stub
System.out.println("后卫" + name + "防守");
}
}
public class Main {
public static void main(String[] args) {
Player b = new Forwards("巴蒂尔");
b.Attack();
Player m = new Guards("麦克格雷迪");
m.Attack();
Player ym = new Center("姚明");
ym.Attack();
ym.Defense();
}
}
改进:加入一个翻译者类来适配。
abstract class Player { // 球员
protected String name;
public Player(String name) {
super();
this.name = name;
}
public abstract void Attack();
public abstract void Defense();
}
class Forwards extends Player { // 前锋
public Forwards(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void Attack() {
// TODO Auto-generated method stub
System.out.println("前锋" + name + "进攻");
}
@Override
public void Defense() {
// TODO Auto-generated method stub
System.out.println("前锋" + name + "防守");
}
}
class Center extends Player { // 中锋
public Center(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void Attack() {
// TODO Auto-generated method stub
System.out.println("中锋进攻" + name + "进攻");
}
@Override
public void Defense() {
// TODO Auto-generated method stub
System.out.println("中锋" + name + "防守");
}
}
class Guards extends Player { // 后卫
public Guards(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void Attack() {
// TODO Auto-generated method stub
System.out.println("后卫" + name + "进攻");
}
@Override
public void Defense() {
// TODO Auto-generated method stub
System.out.println("后卫" + name + "防守");
}
}
class ForeignCenter {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void 进攻() {
System.out.println("外籍中锋" + name + "进攻");
}
public void 防守() {
System.out.println("外籍中锋" + name + "防守");
}
}
class Translator extends Player {
private ForeignCenter wjzf = new ForeignCenter();
public Translator(String name) {
super(name);
wjzf.setName(name);
// TODO Auto-generated constructor stub
}
@Override
public void Attack() {
// TODO Auto-generated method stub
wjzf.进攻();
}
@Override
public void Defense() {
// TODO Auto-generated method stub
wjzf.防守();
}
}
public class Main {
public static void main(String[] args) {
Player b = new Forwards("巴蒂尔");
b.Attack();
Player m = new Guards("麦克格雷迪");
m.Attack();
Player ym = new Translator("姚明");
ym.Attack();
ym.Defense();
}
}
运行结果:
前锋巴蒂尔进攻
后卫麦克格雷迪进攻
外籍中锋姚明进攻
外籍中锋姚明防守