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);
}
}
//被適配的對(duì)象
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來(lái)中國(guó)旅游,請(qǐng)了個(gè)中國(guó)翻譯
Console.WriteLine("P1,P2來(lái)中國(guó)旅游,請(qǐng)了個(gè)中國(guó)翻譯");
p = new TranslatorAdapter("JOM");
p.Say();
p1 = new TranslatorAdapter("アレクサンダー大");
p1.Say();
Console.ReadLine();
}
總結(jié):轉(zhuǎn)換接口使不兼容的類可以一起工作,一般在軟件開(kāi)發(fā)后期階段使用很多。
與代理模式差別在于
1、代理模式中被代理的類是不允許被客戶端訪問(wèn)的,
代理類知識(shí)轉(zhuǎn)達(dá)被代理類的行為意圖,
設(shè)計(jì)時(shí)代理類和被代理是同一個(gè)接口。
假如被代理類可以直接被訪問(wèn),那么被代理類和代理類最終都是執(zhí)行的同一個(gè)方法。
2、適配器模式是為了實(shí)現(xiàn):客戶的某個(gè)行為意圖希望轉(zhuǎn)變成另外一種行為意圖。
即轉(zhuǎn)變?yōu)楸贿m配角色的行為。
比如英文:i love you,中文:我愛(ài)你,
在中國(guó)老外說(shuō):i love you‘’,就需要適配器轉(zhuǎn)成我愛(ài)你,而‘’我愛(ài)你‘’就是被適配的對(duì)象
使用場(chǎng)景:
老系統(tǒng):add(param1,param2,param3)
新系統(tǒng):add(param1,param2,param3,param4)
新系統(tǒng)調(diào)用老系統(tǒng)的add,新系統(tǒng)此時(shí)就就需要加適配類了。
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開(kāi)啟,新人活動(dòng)云服務(wù)器買多久送多久。