6 设计模式之适配器模式(六)

适用场合:当我们想使用一个已经存在的类,但是它的方法(就是接口)和你的要求不同时就应该考虑使用适配器模式,更具体些就是当两个类所做的事情相同,但是他们具有不同的接口时就应该考虑使用它,这时客户端代码就可以统一的调用接口了,这样就可以 更简单、更直接、更紧凑。

这是个什么设计模式呢?上面介绍的适用场合就是适配器模式,它将一个类的接口转换成客户希望的另一个接口,适配器模式使得原本接口不兼容而不可以一起工作的那些类可以一起工作。

下面是相关的结构代码:

1 抽象类Player.java

package com.ops.adapter;

public abstract class Player {

	protected String name = null;

	public abstract void Attack();
	public abstract void Defense();

	public Player(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}
2 Forwards.java、Center.java、Guards.java三个Java文件实现上面的抽象类

2.1 Forwards.java

package com.ops.adapter.base;

import com.ops.adapter.Player;

public class Forwards extends Player {

	public Forwards(String name) {
		super(name);
	}
	@Override
	public void Attack() {
		System.out.printf("前锋%s进攻\n", this.name);
	}

	@Override
	public void Defense() {
		System.out.printf("前锋%s防守\n", this.name);
	}

}

2.2 Center.java

package com.ops.adapter.base;

import com.ops.adapter.Player;

public class Center extends Player {

	public Center(String name) {
		super(name);
	}
	@Override
	public void Attack() {
		System.out.printf("中锋%s进攻\n", this.name);
	}

	@Override
	public void Defense() {
		System.out.printf("中锋%s防守\n", this.name);
	}

}

2.3 Guards.java

package com.ops.adapter.base;

import com.ops.adapter.Player;

public class Guards extends Player {

	public Guards(String name) {
		super(name);
	}
	@Override
	public void Attack() {
		System.out.printf("后卫%s进攻\n", this.name);
	}

	@Override
	public void Defense() {
		System.out.printf("后卫%s防守\n", this.name);
	}

}
3 上面是不需要适配器的实现类,这里的Translator则是适配器类,适配了里面的foreignCenter对象,因为该对象与客户端调用代码的接口不一致。

3.1 Translator.java

package com.ops.adapter.base;

import com.ops.adapter.Player;

/**
 * 使用翻译者作为来告诉外籍中锋进行工作,这里用作适配器.
 * @author xuecheng
 *
 */
public class Translator extends Player {

	private ForeignCenter foreignCenter = null;
	public Translator(String name) {
		super(name);
		foreignCenter = new ForeignCenter(name);
	}
	@Override
	public void Attack() {
		foreignCenter.AttackTranstalor();
	}

	@Override
	public void Defense() {
		foreignCenter.DefenseTranstalor();
	}

}


3.2 ForeignCenter.java

package com.ops.adapter.base;

public class ForeignCenter {

	private String name = null;
	
	public ForeignCenter(String name) {
		this.name = name;
	}

	public void AttackTranstalor() {
		System.out.printf("外籍中锋%s进攻\n", this.name);
	}
	
	public void DefenseTranstalor() {
		System.out.printf("外籍中锋%s防守\n", this.name);
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值