17.1 在NBA我需要翻译!

17.2 适配器模式

Adapter,将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作,

有些国家电压110v,而我国电压220v,笔记本电脑不是什么电压都能用的,所以有电源适配器这个东西,

系统的数据和行为都正确,但接口不符时,我们应该考虑用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配,适配器模式主要应用于希望复用一些现存的类,但是接口与复用环境要求不一致的情况,

namespace 适配器模式
{
class Program
{
static void Main(string[] args)
{
Target target = new Adapter(); //对客户端来说,调用的就是Target的Request方法,
target.Request(); Console.Read();
}
} //客户所期待的接口,目标可以是具体的或抽象的类,也可以是接口,
class Target
{
public virtual void Request()
{
Console.WriteLine("普通请求");
}
} //需要适配的类,
class Adaptee
{
public void SpecificRequest()
{
Console.WriteLine("特殊请求");
}
} //通过在内部包装一个Adaptee对象,把源接口转换成目标接口,
class Adapter : Target
{
private Adaptee adaptee = new Adaptee(); public override void Request()
{
adaptee.SpecificRequest(); //这样就可以把表面上调用Request方法变成实际上调用SpecificRequest方法,
}
} }

17.3 何时使用适配器模式

使用一个已经存在的类,但如果它的接口,也就是它的方法和你的要求不相同时,就应该考虑适配器模式?对的,两个类所做的事情相同或相似,但是具有不同的接口时要使用它,而且由于类都共享同一个接口,客户代码可以统一调用同一接口就行了,这样可以更简单,更直接,更紧凑,

17.4 篮球翻译适配器

namespace 适配器模式
{
class Program
{
static void Main(string[] args)
{
Player b = new Forwards("巴蒂尔");
b.Attack(); Player m = new Guards("麦克格雷迪");
m.Attack(); //Player ym = new Center("姚明"); Player ym = new Translator("姚明");
ym.Attack();
ym.Defense(); Console.Read();
}
} //抽象篮球运动员类,
abstract class Player
{
protected string name; public Player(string name)
{
this.name = name;
} //进攻,
public abstract void Attack(); //防守,
public abstract void Defense();
} //前锋类,
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);
}
} //中锋类,
class Center : Player
{
public Center(string name)
: base(name)
{ } public override void Attack()
{
Console.WriteLine("中锋 {0} 进攻", name);
} public override void Defense()
{
Console.WriteLine("中锋 {0} 防守", name);
}
} //后卫类,
class Guards : Player
{
public Guards(string name)
: base(name)
{ } public override void Attack()
{
Console.WriteLine("后卫 {0} 进攻", name);
} public override void Defense()
{
Console.WriteLine("后卫 {0} 防守", name);
}
} //外籍中锋类,
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);
}
} //翻译者类,适配器,
class Translator : Player
{
private ForeignCenter wjzf = new ForeignCenter(); public Translator(string name)
: base(name)
{
wjzf.Name = name;
} public override void Attack()
{
wjzf.进攻();
} public override void Defense()
{
wjzf.防守();
}
} }

17.5 适配器模式的.NET应用

比如在.NET中有一个类库已经实现非常重要的适配器,那就是DataAdapter,DataAdapter用作与DataSet和数据源之间的适配器以便检索和保存数据,

17.6 扁鹊的医术

最新文章

  1. Optimal Flexible Architecture(最优灵活架构)
  2. 基于CkEditor实现.net在线开发之路(6)vs开发工具配合一起开发
  3. SQL 2012 Restore HeaderOnly
  4. 关于线上的bug什么时候修复的思考
  5. background-size背景缩放
  6. 2016 - 1 - 24 NSURLSession (一)
  7. php基础03:数据类型
  8. vim基本使用
  9. CA接口测试类
  10. mysql查找重复
  11. Bootstrap--导航元素
  12. U3D简单得换装技术
  13. 如何自定义容器网络?- 每天5分钟玩转 Docker 容器技术(33)
  14. DDL中drop-alter table
  15. 修改firefox的默认缩放比
  16. object-fit、object-position 属性
  17. java 基础 异常
  18. 一个简单的binlog恢复测试
  19. 关于浏览器对html, js,css的解析先后顺序的理解
  20. 【转】Wireshark和Fiddler分析Android中的TLS协议包数据(附带案例样本)

热门文章

  1. 搭建本地测试es集群
  2. Linux 查看磁盘IO并找出占用IO读写很高的进程
  3. 降级gcc版本
  4. mybatis入门案例自定义实现
  5. 用javascript修改html元素的class
  6. 三、 TCP(传输控制协议)
  7. [python-docx]docx文档操作的库
  8. 关于Icon,Image,ImageIcon的简单的对比参考
  9. ARTS Week 6
  10. 用Java实现简单的网络聊天程序