一,理解:
1,书上的说法:
将一个类的接口转换成客户希望的另一个接口,Asapter模式使得原来由于接口不见同二不能一起工作的那些类一起工作
2,自己的理解:
通过一个桥梁将两个不兼容的接口连接起来
二,用法:
1,什么时候用?
(1)所需要的类与现在的系统不相符的时候用
(2)可以用于转换接口,将一个类插入到另一个类当中。
(3)两个类都不太容易修改的情况下使用
2,如何用?
主要是通过继承和依赖
3,重点是什么?
适配器继承现有的类,再将所需的类插入到原有类当中
4,优缺点是什么?
(1)优点:
- 可以让特殊点的类也其他的类一起运行
- 更加灵活
- 类的复用性好
(2)缺点
- 适配器使用太多会导致混乱,调用时也容易出错
5,生活中的相似举例:
(1)出国必带的转换电压器,国外和国内的电压是不同的,因此需要转换电压来充电
(2)平时我们使用的格式工厂,可以将现有的格式转换为其他的格式
三,举例:
举例就按照大话设计模式的例子来敲的代码:在NBA当中的姚明刚去时由于用英语不好便请了实时翻译,翻译就相当于一个转换接口,可以传达教练的话
主要分为三个类:前锋,中锋,后锋
主要的方法主要有:攻击,防守
1,先写出正常的球员的类:
abstract class Player
{
protected string name;
public Player(string name)
{
this.name = name;
}
public abstract void Attrack();
public abstract void Default();
}
2,写出主要的三种不同球员位置的类,并继承球员的类:
class Forwords : Player//前锋
{
public Forwords(string name) : base(name)
{ }
public override void Attrack()
{
Console.WriteLine("前锋:{0}进攻", name);
}
public override void Default()
{
Console.WriteLine("前锋:{0}防守", name);
}
}
class Center : Player//中锋
{
public Center(string name) : base(name)
{ }
public override void Attrack()
{
Console.WriteLine("前锋:{0}进攻", name);
}
public override void Default()
{
Console.WriteLine("前锋:{0}防守", name);
}
}
class Guards : Player//后卫
{
public Guards(string name) : base(name)
{ }
public override void Attrack()
{
Console.WriteLine("后卫:{0}进攻", name);
}
public override void Default()
{
Console.WriteLine("后卫:{0}防守", name);
}
}
3,写一个外籍中锋的类:
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 );
}
}
4,翻译者类,相当于接口,可以通过接口将外籍中锋插入到类当中来
class Translator:Player
{
private ForeignCenter haha = new ForeignCenter();
public Translator (string name ):base (name)/实例化一个内部的外籍中锋,表明翻译者与外籍 有关系
{
haha.Name = name;
}
public override void Attrack()/通过翻译告诉了中锋进攻
{
haha.进攻();
}
public override void Default()/同上
{
haha.防守();
}
}
5,客户端代码:
static void Main(string[] args)
{
Player b = new Forwords("巴蒂尔");
b.Attrack();
Player m = new Guards("麦克格雷迪");
m.Default();
Player xx = new Translator("姚明");
xx.Default();
xx.Attrack();
Console.Read();
}