23种设计模式-静态代理模式
Posted yppaopao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了23种设计模式-静态代理模式相关的知识,希望对你有一定的参考价值。
代理模式的分类:
-
静态代理
-
-
接口
//租房
public interface Rent {
public void rent();
} -
真实角色
//房东
public class Host implements Rent {
public void rent(){
System.out.println("房东要出租房子!");
}
} -
代理角色 通过组合的方式 将房东带进来
public class Proxy implements Rent {
private Host host;
?
public Proxy() {
}
public Proxy(Host host) {
this.host = host;
}
?
public void rent(){
seeHouse();
host.rent();
hetong();
fee();
}
//看房
public void seeHouse(){
System.out.println("中介带你看房");
}
//签合同
public void hetong(){
System.out.println("签合同");
}
//收费
public void fee(){
System.out.println("收取中介费用");
}
} -
客户端访问
public class Client {
public static void main(String[] args) {
//房东要租房子
Host host = new Host();
//代理,中介帮房东租房子,但是呢?代理角色一般会有一些附属操作!
Proxy proxy = new Proxy(host);
proxy.rent();
}
}
代理模式的好处:
-
可以使真实角色的操作更加纯粹!不用去关注一些公共的业务
-
公共也就交给代理角色!实现了业务的分工!
-
公共业务发生扩展的时候,方便集中管理!
缺点:
-
一个真实角色就会产生一个代理角色,代码量会翻倍,开发效率会变低
加深理解
一个接口类
package com.kuang.demo02; public interface UserService { public void add(); public void delete(); public void update(); public void query(); }
接口实现类
package com.kuang.demo02; //真实对象 public class UserServiceImpl implements UserService { @Override public void add() { System.out.println("增加了一个用户!"); } @Override public void delete() { System.out.println("删除了一个用户!"); } @Override public void update() { System.out.println("修改了一个用户!"); } @Override public void query() { System.out.println("查询了一个用户!"); } }
在原有的基础上想增加一个日志的功能 根据oop七大原则里 这里可以使用动态代理模式
一个代理类
package com.kuang.demo02; import java.security.PublicKey; public class UserServiceProxy implements UserService { //代理 需要代理真实的对象 这里引入真实的对象 private UserServiceImpl userService; public void setUserService(UserServiceImpl userService) { this.userService = userService; } @Override public void add() { log("add"); userService.add(); } @Override public void delete() { log("delete"); userService.delete(); } @Override public void update() { log("update"); userService.update(); } @Override public void query() { log("query"); userService.query(); } // 日志方法 public void log(String msg){ System.out.println("[debug]使用了"+"方法!"); } }
测试类
package com.kuang.demo02; public class Client { public static void main(String[] args) { UserServiceImpl userService = new UserServiceImpl(); UserServiceProxy proxy =new UserServiceProxy(); proxy.setUserService(userService); proxy.add(); } }
以上是关于23种设计模式-静态代理模式的主要内容,如果未能解决你的问题,请参考以下文章