java之 代理设计模式
1. 設(shè)計(jì)一個(gè)案例來(lái)實(shí)現(xiàn)租房功能。分析:在租房的過(guò)程中涉及到了3個(gè)對(duì)象,房東,中介,房客。
中介和房客具有相同的功能--租房。
可以設(shè)計(jì)如下:
2.上圖的設(shè)計(jì)實(shí)際上就是一個(gè)代理設(shè)計(jì)模式---靜態(tài)代理設(shè)計(jì)模式。
代理設(shè)計(jì)模式有4個(gè)角色
抽象角色 : 是一個(gè)接口,使得真實(shí)角色和代理角色具有相同的功能。
真實(shí)角色: 實(shí)際存在某個(gè)功能或權(quán)限的角色。
代理角色:代理真實(shí)角色實(shí)現(xiàn)某種功能。代理角色可以附加另外一些功能。
客戶端:使用代理角色。
3.使用代碼實(shí)現(xiàn)
Rent.java
public interface Rent {//租房public void rent(); }Host.java
public class Host implements Rent{@Overridepublic void rent() {System.out.println("========將房屋出租=======");} }Proxy.java
public class Proxy implements Rent{private Host host;public Proxy(Host host) {super();this.host = host;}@Overridepublic void rent() {fare();host.rent();maintance();}private void fare(){System.out.println("-----收取中介費(fèi)---");}private void maintance(){System.out.println("-----房屋維護(hù)---");}public void setHost(Host host) {this.host = host;} }Client.java
public class Client {public static void main(String[] args) {Host host = new Host();Proxy proxy = new Proxy(host);proxy.rent();} }4.作用
真實(shí)角色代碼在不增加的情況下,增加了新的功能。
5.應(yīng)用案例
UserService.java
public interface UserService {public void add();public void delete();public void update(); }UserServiceImpl.java
/*** 在service的方法中,經(jīng)常會(huì)有一些公共的功能,* 如:事務(wù),日志,權(quán)限,緩存等**/ public class UserServiceImpl implements UserService{@Overridepublic void add() {System.out.println("add");}@Overridepublic void delete() {System.out.println("delete");}@Overridepublic void update() {System.out.println("update");} }UserServiceImplProxy.java
public class UserServiceImplProxy implements UserService{private UserService userService;@Overridepublic void add() {LogUtil.log();userService.add();}@Overridepublic void delete() {LogUtil.log();userService.delete();}@Overridepublic void update() {LogUtil.log();userService.update();}}LogUtil.java
public class LogUtil {public static void log(){System.out.println("進(jìn)入了方法");} }?
6.總結(jié)
通過(guò)以上代碼可知,
優(yōu)點(diǎn):靜態(tài)代理實(shí)現(xiàn)了公共業(yè)務(wù)和真實(shí)的業(yè)務(wù)邏輯的分離,降低了耦合,結(jié)構(gòu)更清晰,維護(hù)更方便,擴(kuò)展更容易,分工更明確。
缺點(diǎn):代碼的復(fù)雜程度增加,每個(gè)業(yè)務(wù)類都需要有一個(gè)相關(guān)的代理類,代碼量增加-------解決辦法:使用動(dòng)態(tài)代理。
?
轉(zhuǎn)載于:https://www.cnblogs.com/Vincent-yuan/p/11260911.html
總結(jié)
以上是生活随笔為你收集整理的java之 代理设计模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 题目11 数值的整数次方
- 下一篇: ISelectionSet接口