Definición del modo de adaptador (Adaptador) : Convierta la interfaz de una clase en otra interfaz que desee el cliente. El patrón Adaptador permite que las clases que no pueden trabajar juntas debido a la incompatibilidad de la interfaz trabajen juntas.
Escenario de uso :
- Reutilice algunas clases existentes, pero la interfaz no es coherente con el entorno de reutilización
- Cuando ambas partes no son fáciles de modificar
Antecedentes del código: Yao Ming fue a los Estados Unidos para jugar en la NBA, pero no pudo comunicarse con los entrenadores y jugadores porque no podía comunicarse con los entrenadores y jugadores.
Categoría de jugador:
abstract class Player
{
protected string name;
public Player(string name)
{
this.name = name;
}
public abstract void Attack();//进攻
public abstract void Defense();//防守
}
Adelante: Comunica tácticas en inglés, Yao Ming no sabe qué significa Ataque () y Defensa ()
//前锋
class Forwards : Player
{
public Forwards (string name):base(name)
{
}
public override void Attack()
{
Console.WriteLine("前锋{0}进攻",name);
}
public override void Defense()
{
Console.WriteLine("前锋{0}防守",name);
}
}
Centro extranjero (Yao Ming): use el chino para comunicar tácticas y solo diga "ofensivo" y "defensa"
class ForeignCenter
{
private string name;
public string Name//用属性而不是用构造方法,目的是区分其他球员类
{
get {
return name; }
set {
name = value; }
}
public void 进攻()
{
Console.WriteLine("外籍中锋{0}进攻",name);
}
public void 防守()
{
Console.WriteLine("外籍中锋{0}防守",name);
}
}
Clase de traductor: el trabajo del adaptador
class Translator:Player
{
//声明并实例化一个内部“外籍中锋”对象,表明翻译者与外籍中锋有关联
private ForeignCenter wjzf = new ForeignCenter();
public Translator (string name):base(name)
{
wjzf.Name = name;
}
public override void Attack()//翻译者将Attack翻译为进攻,告诉了外籍中锋
{
wjzf.进攻();
}
public override void Defense()//翻译者将Defens翻译为防守,告诉了外籍中锋
{
wjzf.防守();
}
}
Cliente:
static void Main(string[] args)
{
Player b = new Forwards("巴蒂尔");
b.Attack();
b.Defense();
Player ym = new Translator("姚明");
ym.Attack();
ym.Defense();
Console.ReadKey();
}