1.簡(jiǎn)介
代理模式(Proxy Pattern)是GoF(Gang of Four) 23種Java常用設(shè)計(jì)模式之一拘泞。代理模式的定義:Provide a surrogate or placeholder for another object to controlaccess to it(為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問(wèn))翅娶。使用代理模式創(chuàng)建代理對(duì)象钧唐,讓代理對(duì)象控制目標(biāo)對(duì)象的訪問(wèn)(目標(biāo)對(duì)象可以是遠(yuǎn)程的對(duì)象、創(chuàng)建開銷大的對(duì)象或需要安全控制的對(duì)象),并且可以在不改變目標(biāo)對(duì)象的情況下添加一些額外的功能。
2.UML類圖
3.模式中包含的角色和職責(zé)
Subject:抽象主題角色喊衫,抽象主題類可以是抽象類贾虽,也可以是接口摩泪,是一個(gè)最普通的業(yè)務(wù)類型定義,無(wú)特殊要求韩脑。
RealSubject:具體主題角色氢妈,也叫被委托角色、被代理角色段多。是業(yè)務(wù)邏輯的具體執(zhí)行者允懂。
Proxy:代理主題角色,也叫委托類衩匣、代理類。它把所有抽象主題類定義的方法給具體主題角色實(shí)現(xiàn)粥航,并且在具體主題角色處理完畢前后做預(yù)處理和善后工作琅捏。(最簡(jiǎn)單的比如打印日志)
4.Demo演示
demo介紹:秘書充當(dāng)代理角色幫老板處理各種事情,在demo里面的是秘書幫老板(馬云递雀、馬化騰)發(fā)工資柄延、寫文件,當(dāng)然了要添加什么事件直接在接口類規(guī)定就行缀程。
①項(xiàng)目結(jié)構(gòu)
②Boss接口類(全部老板有的共性搜吧,比如發(fā)工資和寫文件等)
public interface Boss {
/** * 老板的共性 */
void writeFile();//寫文件
void payoff();//發(fā)工資
}
③具體老板(馬化騰)
public class MaHuaTeng implements Boss {
@Override public void writeFile() {
Log.i("proxy","MaHuaTeng--->writeFile");
}
@Override public void payoff() {
Log.i("proxy","MaHuaTeng--->payoff");
}
}
④具體老板(馬云)
public class MaYun implements Boss {
@Override public void writeFile() {
Log.i("proxy","MaYun--->writeFile");
} @Override public void payoff() {
Log.i("proxy","MaYun--->payoff");
}
}
⑤秘書
public class Secretary implements Boss {
private final Boss boss;
public Secretary() {
this.boss=new MaHuaTeng();
}
//這里可能會(huì)有人覺(jué)得奇怪,為什么還要這個(gè)參數(shù)杨凑,后面會(huì)解釋
public Secretary(Boss boss) {
this.boss=boss;
}
@Override
public void writeFile() {
this.boss.writeFile();
}
@Override
public void payoff() {
this.boss.payoff();
}
}
⑥實(shí)體類
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Secretary secretary = new Secretary();
secretary.writeFile();//秘書代馬化騰寫文件
secretary.payoff();//秘書代馬化騰發(fā)工資
Secretary mayun_sec = new Secretary(new MaYun());
mayun_sec.writeFile();//秘書幫馬云寫文件
mayun_sec.payoff();//秘書幫馬云發(fā)工資 }
}
ps:嚴(yán)格意義上來(lái)講滤奈,帶Boss參數(shù)那個(gè)構(gòu)造方法不是太合理的,因?yàn)橛玫臅r(shí)候就會(huì)暴露了被代理人撩满,只有像無(wú)參數(shù)構(gòu)造那樣才真正算符合蜒程,本文是為演示效果才寫的對(duì)比。
演示效果:
ps:如有不恰當(dāng)?shù)牡胤剿帕保瑲g迎指出O(∩_∩)O昭躺。
掃描添加關(guān)注