在NBA我需要翻译 适配器模式
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 扁鹊的医术
在NBA我需要翻译 适配器模式的更多相关文章
- 【结构型模式】《大话设计模式》——读后感 (12)在NBA我需要翻译?——适配器模式
适配器模式:将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能在一起工作的 那些类可以在一起工作了[DP] UML类图: 简单模拟一下代码: //已存在的.具有 ...
- 适配器模式--在NBA我需要翻译
适配器模式:将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 在软件开发中,也就是系统的数据和行为都正确,但接口不符时,我们应 ...
- 深入浅出设计模式——适配器模式(Adapter Pattern)
模式动机 在软件开发中采用类似于电源适配器的设计和编码技巧被称为适配器模式. 通常情况下,客户端可以通过目标类的接口访问它所提供的服务.有时,现有的类可以满足客户类的功能需要,但是它所提供的接口不一定 ...
- 阿里P8架构师大话设计模式,体会乐与怒的程序人生中值得回味一幕
本书特色 本书有两个特色,第一特色是重视过程.看了太多的计算机编程类的图书,大多数书籍都是集中在讲授优秀的解决方案或者一个完美的程序样例,但对这些解决方案和程序的演变过程却重视不够,好书之所以好,就是 ...
- [Python设计模式] 第17章 程序中的翻译官——适配器模式
github地址:https://github.com/cheesezh/python_design_patterns 适配器模式 适配器模式,将一个类的接口转换成客户希望的另外一个接口.Adapte ...
- C#学习笔记-适配器模式
什么是适配器模式? 适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口. Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 什么时候运用适配器模式? ...
- 适配器模式(Adpater)
一.适配器模式介绍 适配器模式:将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的类可以一起工作. 例如: NBA中的球员来自不同国家,而世界标准语言 ...
- IOS设计模式之三(适配器模式,观察者模式)
本文原文请见:http://www.raywenderlich.com/46988/ios-design-patterns. 由 @krq_tiger(http://weibo.com/xmuzyq) ...
- 《PHP 设计模式》翻译完毕
翻译进度请见:https://laravel-china.org/docs/php-design-patterns/2018?mode=sections 设计模式不仅代表着更快开发健壮软件的有用方法, ...
随机推荐
- reactNative-解决react native使用fetch函数 Network request failed 问题
解决react native使用fetch函数Network request failed问题 最近公司新开发一个app, 用react native架构好后,用xcode模拟器打开app,对接登陆接 ...
- C语言博客作业6
本周作业头 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 作业链接 我在这个课程的目标是 熟悉多分支结构.字符型数据类型和逻辑运算符 这个作业在那个具体方面帮助我实现目标 完成pta作 ...
- Kafka系列1:Kafka概况
Kafka系列1:Kafka概况 Kafka是当前分布式系统中最流行的消息中间件之一,凭借着其高吞吐量的设计,在日志收集系统和消息系统的应用场景中深得开发者喜爱.本篇就聊聊Kafka相关的一些知识点. ...
- Leetcode 题目整理-6 Swap Nodes in Pairs & Remove Duplicates from Sorted Array
24. Swap Nodes in Pairs Given a linked list, swap every two adjacent nodes and return its head. For ...
- Linux用户在第一次登录时强制更改初始密码
迫使用户更改密码 如果你想迫使用户更改其密码,请使用下面这个命令. $ sudo chage -d0 <user-name> 最初,“-d <N>”选项应该被设成密码的“有 ...
- mysql常用语句及实题训练
基本语句操作 创建数据库: create database database-name 1 删除数据库: drop database database-name 1 修改数据名: RENAME DAT ...
- TensorFlow中使用GPU
TensorFlow默认会占用设备上所有的GPU以及每个GPU的所有显存:如果指定了某块GPU,也会默认一次性占用该GPU的所有显存.可以通过以下方式解决: 1 Python代码中设置环境变量,指定G ...
- PHP第三方登录——QQ登录
主要内容 简单回顾OAuth协议基本原理 接入QQ登录的前置条件以及开放平台账号申请 引入官方SDK SDK参数配置 SDK核心方法解读 整合QQ登录SDK到Web应用中 SDK优化 调用API的开发 ...
- frp内网穿透协助内网程序(如微信相关)开发
众所周知,在本机上开发微信相关的程序,很不方便,因为拨号IP随机,而且很多端口不支持,如80,443 所以,有必要使用一台外网主机中转. frp就可以解决此问题 安装环境,外网服务器:腾讯云,cent ...
- k8s系列--- dashboard认证及分级授权
http://blog.itpub.net/28916011/viewspace-2215214/ 因版本不一样,略有改动 Dashboard官方地址: https://github.com/kube ...