abstract class Person
{
public string name;
public Person(string _name)
{
name = _name;
}
public abstract void Say();
}
class EnglishPerson : Person
{
public EnglishPerson(string _name) : base(_name)
{
}
public override void Say()
{
Console.WriteLine("i'm{0}",name);
}
}
//被适配的对象
class ChinesePerson : Person
{
public ChinesePerson(string _name) : base(_name)
{
}
public override void Say()
{
Console.WriteLine("我是{0}", name);
}
}
class JapanPerson : Person
{
public JapanPerson(string _name) : base(_name)
{
}
public override void Say()
{
Console.WriteLine("私は{0}と申します", name);
}
}
class TranslatorAdapter : Person
{
private ChinesePerson cp;
public TranslatorAdapter(string _name) : base(_name)
{
cp = new ChinesePerson(name);
}
public override void Say()
{
cp.Say();
}
}
//前端
static void Main(string[] args)
{
Person p = new EnglishPerson("JOM");
p.Say();
Person p1 = new JapanPerson("アレクサンダー大");
p1.Say();
Console.ReadKey();
//P1,P2来中国旅游,请了个中国翻译
Console.WriteLine("P1,P2来中国旅游,请了个中国翻译");
p = new TranslatorAdapter("JOM");
p.Say();
p1 = new TranslatorAdapter("アレクサンダー大");
p1.Say();
Console.ReadLine();
}
总结:转换接口使不兼容的类可以一起工作,一般在软件开发后期阶段使用很多。
与代理模式差别在于
1、代理模式中被代理的类是不允许被客户端访问的,
代理类知识转达被代理类的行为意图,
设计时代理类和被代理是同一个接口。
假如被代理类可以直接被访问,那么被代理类和代理类最终都是执行的同一个方法。
2、适配器模式是为了实现:客户的某个行为意图希望转变成另外一种行为意图。
即转变为被适配角色的行为。
比如英文:i love you,中文:我爱你,
在中国老外说:i love you‘’,就需要适配器转成我爱你,而‘’我爱你‘’就是被适配的对象
使用场景:
老系统:add(param1,param2,param3)
新系统:add(param1,param2,param3,param4)
新系统调用老系统的add,新系统此时就就需要加适配类了。
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。
网站名称:设计模式-适配器模式-创新互联
文章路径:https://www.cdcxhl.com/article26/dpeccg.html
成都网站建设公司_创新互联,为您提供App设计、企业网站制作、微信公众号、标签优化、静态网站、用户体验
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联