代理类将扩展的功能在代理类中来实现,不破坏实现类的封装行
已知接口UserManager.java含有四个方法:
package com.wlh;
public interface UserManager {
public void addUser(String username,String pwd);
public void delUser(int id);
public void findUser(int id);
public void updateUser(int id ,String username,String pwd);
}
类:UserManagerImpl.java实现了以上接口的方法:
package com.wlh;
public class UserManagerImpl implements UserManager {
public void addUser(String username, String pwd) {
System.out.println("====addUser()=====");
}
public void delUser(int id) {
System.out.println("====delUser()=====");
}
public void findUser(int id) {
System.out.println("====findUser()=====");
}
public void updateUser(int id, String username, String pwd) {
System.out.println("====updateUser()=====");
}
}
现在有需求要在实现类中的每个方法执行前要添加一段代码,完成完全性检查的功能
最简单的做法我们可以在实现类中添加一个方法如下:
public void checkSecurity(){
System.out.println("=====checkSecurity()======");
}
分析以上做法,向实现类中添加方法,破坏了实现类UserManagerImpl.java的封闭性,
如果随后又需求在实现类的每个方法中添加新功能,这样。。。。得不停的改动实现类。。。。。我们的解决办法是,利用代理模式:
代理类的设计原则是:是代理类实现我们接口(空实现),在代理类中添加一个构造方法开接收我们的实现类的实例。然后将实现类中要扩展的功能在代理类中单独写成一个方法,具体如下:
package com.wlh;
public class UserManagerImplProxy implements UserManager {
private UserManager userManager;
//===构造方法接收实现类UserManagerImpl.java的实例===//
public UserManagerImplProxy(UserManager userManager){
this.userManager=userManager;
}
public void addUser(String username, String pwd) {
checkSecurity();
this.userManager.addUser(username, pwd);
}
public void delUser(int id) {
checkSecurity();
this.userManager.delUser(id);
}
public void findUser(int id) {
checkSecurity();
this.userManager.findUser(id);
}
public void updateUser(int id, String username, String pwd) {
checkSecurity();
this.userManager.updateUser(id, username, pwd);
}
public void checkSecurity(){
System.out.println("=====checkSecurity()======");
}
}
客户端调用类:
package client;
import com.wlh.UserManager;
import com.wlh.UserManagerImpl;
import com.wlh.UserManagerImplProxy;
public class Client {
public static void main(String []args){
//构造方法接收实现类的对象
UserManager userManager=new UserManagerImplProxy(new UserManagerImpl());
userManager.addUser("wlh", "wlh");
}
}
分享到:
相关推荐
主要对Spring AOP的相关概念和简单的静态代理、动态代理以及常见的几种AOP配置方式做总结学习。主要包括:1. AOP的常见概念 2. 静态代理 3. jdk动态代理 4. Aspectj and Aspectjweaver 5. **aop-config** 6. CGLIB ...
java设计模式【之】静态代理【源码】【场景:帮爸爸买菜】.rar * 代理模式 * 在开发者的角度来看,创建一个代理对象,提供给用户使用,避免用户直接访问真正的对象 * 在用户角度来看,就是普通的类方法调用 * ...
JAVA静态代理和动态代理
Java静态代理和动态代理
本资源包含了博主博客中的代码,用一个黄牛买票的例子帮助新手理解静态代理与动态代理的原理
这是一个基于spring AOP静态代理模拟的案例,可以更好的理解spring的aop作用
静态代理和动态代理的讲解和案例,有详细的注释
结合spring框架实现的静态代理,接口回掉
包含静态代理和动态代理demo代码
Java各种代理模式以及AOP的实现代码 : 1.AspectJ - 静态代理 2. 动态代理 (1)JDK动态代理 (2)CGlib代理
静态代理总结: 优点:可以做到在符合开闭原则的情况下对目标对象进行功能扩展。 缺点:我们得为每一个服务都得创建代理类,工作量太大,不易管理。同时接口一旦发生改变,代理类也得相应修改。
这里提供了静态代理和动态代理的入门写法~一看即懂!
Java设计模式——代理设计模式(静态代理和动态代理) 各种情况例子源码
设计模式之代理模式_静态代理的一个java实现的demo。主类在Client中。仅代码实现,可供初学者参考使用
java提高-动态代理与静态代理.docx
Nginx各种配置(包括负载均衡、静态代理、动静分离)
静态代理代理模式,顾名思义就是提供一个代理类,可以访问原对象并且替原对象进行一些操作。 优点:使用代理模式可以在保证不修改原有类的同时(即满足对扩展开放,对修改关闭的原则),对原有类增加一些功能实现。
Java 静态代理
在代理模式中,主要有两种类型:静态代理和动态代理。 1.静态代理: 静态代理是指在编译期间就已经确定代理类和被代理类的关系,需要手动编写代理类。代理类需要实现与被代理类相同的接口,并且在代理类中持有一个被...
此资源为文章中《代理设计模式:静态代理和动态代理的理解、实现与区别(优缺点)》与《 AOP动态代理声明式的3种配置方式过程与区别》的案例代码,可下载参考学习。