阅读背景:

[初级]适配器模式

来源:互联网 

 

/**
 * 适配器模式
 * 	1、源角色(已有的角色)
 * 	2、目的角色(须要成为的角色)
 * 	3、适配器角色(将 原角色 转换成 目的角色)
 * 
 * 长处:
 * 	1、不用修正已有代码
 * 	2、复用已有代码
 * 缺陷:
 * 	1、会造成类相互之间的关系不清楚
 *
 * 注意:
 *	属于"补钉"办法,尽可能不要有机遇应用
 *
 * 场景:
 * 	功效复合需求,但是调用跟需求不匹配时,中间通过一个转换类来实现二者之间的调用
 * 
 * 	NBA不可轻易转变,CBA不可轻易转变
 * 	CBA球员不会英语,听不懂attack,没法进入NBA球队
 * 	通过翻译翻译,CBA知道了attack就是jingong,可以进入NBA球队
 */
public class AdapterDemo01 {
	public static void main(String[] args) {
		NBAPlayer tmac = new NBAPlayer("T-mac");
		NBAPlayer brooks = new NBAPlayer("布鲁克斯");
		NBAPlayer mutombo = new NBAPlayer("穆托姆博");
		CBAPlayer ym = new CBAPlayer("姚明");
		CBAPlayer dazhizi = new CBAPlayer("郭艾伦");
		
		NBATeam rockets = new NBATeam();
		rockets.add(tmac);
		rockets.add(brooks);
		rockets.add(mutombo);
//		rockets.add(ym);//编译报错
//		rockets.add(dazhizi);//编译报错
		rockets.add(new Translator(ym));//编译通过
		rockets.add(new Translator(dazhizi));//编译通过
		rockets.play();
	}
}
interface NBA{
	public void defend();
	public void attack();
}
interface CBA{
	public void fangShou();
	public void jinGong();
}
class NBAPlayer implements NBA{
	String name;
	public NBAPlayer(String name){
		this.name = name;
	}
	@Override
	public void defend() {
		System.out.println(this.name + "  defend!!!");
	}
	@Override
	public void attack() {
		System.out.println(this.name + "  attack!!!");	
	}
}
class CBAPlayer implements CBA{
	private String name;
	public CBAPlayer(String name){
		this.name = name;
	}
	@Override
	public void fangShou() {
		System.out.println(this.name + "  防守!!!");
	}
	@Override
	public void jinGong() {
		System.out.println(this.name + "  进攻!!!");
	}
}
class NBATeam{
	private List<NBA> playerList = new ArrayList<NBA>();
	public void add(NBA player){
		playerList.add(player);
	}
	public void play(){
		for(NBA play : playerList){
			System.out.println("[NBA]");
			play.attack();
			play.defend();
		}
	}
}
/**
 * 翻译(适配器)
 */
class Translator implements NBA{
	public CBAPlayer player;
	public Translator(CBAPlayer p){
		this.player = p;
	}
	@Override
	public void defend() {
		System.out.println("====翻译翻译 defend 为 defend");
		player.fangShou();
	}
	@Override
	public void attack() {
		System.out.println("====翻译翻译 attack 为 jinGong");
		player.jinGong();
	}
}/**
 * 适配器模式
 * 	1、源角色(已有的角色)
 * 	2、目的角色(须




你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: