java之 代理设计模式
生活随笔
收集整理的這篇文章主要介紹了
java之 代理设计模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 設計一個案例來實現租房功能。分析:在租房的過程中涉及到了3個對象,房東,中介,房客。
中介和房客具有相同的功能--租房。
可以設計如下:
2.上圖的設計實際上就是一個代理設計模式---靜態代理設計模式。
代理設計模式有4個角色
抽象角色 : 是一個接口,使得真實角色和代理角色具有相同的功能。
真實角色: 實際存在某個功能或權限的角色。
代理角色:代理真實角色實現某種功能。代理角色可以附加另外一些功能。
客戶端:使用代理角色。
3.使用代碼實現
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("-----收取中介費---");}private void maintance(){System.out.println("-----房屋維護---");}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.作用
真實角色代碼在不增加的情況下,增加了新的功能。
5.應用案例
UserService.java
public interface UserService {public void add();public void delete();public void update(); }UserServiceImpl.java
/*** 在service的方法中,經常會有一些公共的功能,* 如:事務,日志,權限,緩存等**/ 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("進入了方法");} }?
6.總結
通過以上代碼可知,
優點:靜態代理實現了公共業務和真實的業務邏輯的分離,降低了耦合,結構更清晰,維護更方便,擴展更容易,分工更明確。
缺點:代碼的復雜程度增加,每個業務類都需要有一個相關的代理類,代碼量增加-------解決辦法:使用動態代理。
?
轉載于:https://www.cnblogs.com/Vincent-yuan/p/11260911.html
總結
以上是生活随笔為你收集整理的java之 代理设计模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 题目11 数值的整数次方
- 下一篇: ISelectionSet接口