个人网站建设培训,现在都是用什么做网站,深圳微信商城网站设计价格,dw网页设计下载文章目录 一、代理模式1、代理模式的好处和缺点1.1 代理模式理解加深 一、代理模式
为什么要学习代理模式#xff1f; 代理模式是Spring AOP 以及 Spring MVC 的底层#xff01;#xff01;并且还是 JAVA 的23种设计模式之一#xff01;#xff01; 代理模式的分类#… 文章目录 一、代理模式1、代理模式的好处和缺点1.1 代理模式理解加深 一、代理模式
为什么要学习代理模式
代理模式是Spring AOP 以及 Spring MVC 的底层并且还是 JAVA 的23种设计模式之一 代理模式的分类 静态代理 动态代理 什么是代理模式
如果我们出现了诉求但是因为某些原因我们本身不想或者无法完成这种诉求我们就需要寻求他人的帮助由他人来完成诉求然后我们直接获取成果就可以了。 打个比方学生毕业之后工作是需要租房子的但是学生通常找不到想要把房子租出去的房主房主也不知道那些学生想要租房子。这时候学生和房主便可以找到中介由中介来完成租房以及找房的这个过程。最终学生和房东只需要交笔中介费便达成了自己的目的。 角色分析 抽象角色 比如房东想要把房子租出去这个行为。通常会使用接口或者抽象类来解决。真实角色 被代理的角色比如房东。代理角色 代理真实角色比如中介。代理真实角色后我们一般会做一些附属操作比如看房、签合同等。客户角色 访问代理对象的人比如租房子的人。 代理模式代码演示 抽象角色房东将房子租出去的诉求 public interface HouseRental {void houseRental();
}真实角色房东本身也就是被代理的人 public class Homeowner implements HouseRental{Overridepublic void houseRental() {System.out.println(房东请求中介将房子出租出去);}
}代理角色比如中介中介代理房东将房子出租出去并且进行相关的操作 public class Intermediary implements HouseRental{private Homeowner homeowner;public Intermediary(Homeowner homeowner) {this.homeowner homeowner;}Overridepublic void houseRental() {homeowner.houseRental();seeHouse();sign();fee();}//看房public void seeHouse(){System.out.println(中介带着看房子);}//签合同public void sign(){System.out.println(和中介签署租赁合同);}//收费用public void fee(){System.out.println(中介收取费用);}}客户角色比如想要租房子的人 public class Client {public static void main(String[] args) {// 租户无需直接面对房东Homeowner homeowner new Homeowner();// 房东找到了中介请求把房主租出去Intermediary intermediary new Intermediary(homeowner);// 租户找到了中介请求租房子intermediary.houseRental();}
}代码执行结果 1、代理模式的好处和缺点 好处 可以使真实角色的操作更加纯粹不用去关注一些公共的业务 公共角色就交给代理角色实现了业务的分工 公共业务发生扩展的时候方便集中管理 缺点 一个真实角色就会产生一个代理角色代码量级会翻倍开发效率会降低。 1.1 代理模式理解加深 业务场景公司需要对用户进行增删改查操作 接口 public interface UserService {// 业务场景公司需要对人员进行增删改查操作void add();void update();void delete();void query();}真实角色 public class UserServiceImpl implements UserService{Overridepublic void add() {System.out.println(增加了一个用户);}Overridepublic void update() {System.out.println(修改了一个用户);}Overridepublic void delete() {System.out.println(删除了一个用户);}Overridepublic void query() {System.out.println(查询用户信息);}
}客户端角色访问 public class Client {public static void main(String[] args) {UserServiceImpl userService new UserServiceImpl();userService.update();}
}执行结果修改了一个用户 业务变更公司需要对用户进行增删改查操作的同时需要将对应的操作行为以日志的形式打印出来 如果在操作的同时将日志打印出来的话其实也可以但是会有大量的代码重复操作并且代码原则通常是不修改原本好用的代码如果有变动一般以新增代码为主 接口以及真实角色实现类内容不变创建代理角色 public class Proxy implements UserService{// 将真实角色进行代理private UserServiceImpl userService;// 通过 Set 方法完成代理动作public void setUserService(UserServiceImpl userService) {this.userService userService;}public void add() {log(add);userService.add();}public void delete() {log(delete);userService.delete();}public void update() {log(update);userService.update();}public void query() {log(query);userService.query();}// 打印日志public void log(String mag){System.out.println(执行了 mag 方法);}
}客户端调用代理角色 public class Client {public static void main(String[] args) {// 客户端调用真实角色UserServiceImpl userService new UserServiceImpl();// 真实角色将部分内容交给代理角色处理Proxy proxy new Proxy();proxy.setUserService(userService);proxy.add();proxy.delete();proxy.update();proxy.query();}
}执行结果