AOP_代理模式学习
代理模式的分类:
静态代理
动态代理
1, 静态代理
角色分析:
抽象角色: 一般会使用接口或抽象类来解决
真实角色: 被代理的对象
代理角色: 代理真实角色, 代理真实角色后, 我们一般会做一些附属操作
客户: 访问代理角色的人
典例代码:
以租房为例
1, 创建 Rent 接口
- public interface Rent{
- public void rent();
- }
2,Host 房东
- public class Host implements Rent{
- public void rent(){
- System.out.println("房东要出租房屋!");
- }
- }
3, 创建中介类 Proxy
- public class Proxy implements Rent{
- private Host host;
- public Proxy(){
- }
- public Proxy(Host host){
- this.host = host;
- }
- // 重写的方法
- public void Rent(){
- seeHouse();
- host.rent();
- hetong();
- free();
- }
- // 中介的看房
- public void seeHouse(){
- System.out.println("中介带你去看房!");
- }
- // 中介收中介费
- public void free(){
- System.out.println("中介收中介费!");
- }
- // 中介签租赁合同
- public void hetong(){
- System.out.println("签租赁合同!");
- }
- }
4, 客户租房
- public class Client{
- public static void main(String[] args){
- Host host = new Host();
- // 代理, 中介帮房东租房子, 但是中介一般会有一些附属操作
- Proxy proxy = new Proxy(host);
- proxy.rent();
- }
- }
代理模式的好处:
可以使真实角色的操作更加的纯粹! 不用去关注一些公共的业务
公共业务就交给代理角色, 实现了业务的分工
公共业务发生拓展时, 方便集中管理
缺点:
一个真实角色就会产生一个代理角色, 代码量会翻倍, 开发效率会变低
静态代理的加深理解:
在实现增删改查的基础上添加日志功能
1, 创建接口 Userservice
- public interface UserService{
- public void add();
- public void delete();
- public void update();
- public void query();
- }
2, 创建接口的实现类
- // 真实对象
- public class UserServiceImpl implements UserService{
- public void add(){
- System.out.println("增加了一个用户!");
- }
- public void delete(){
- System.out.println("删除了一个用户!");
- }
- public void update(){
- System.out.println("修改了一个用户!");
- }
- public void query(){
- System.out.println("查询了一个用户!");
- }
- }
3, 测试客户端 Client
- public class Client{
- public static void main(String[] args){
- UserServiceImpl userService = new UserServiceImpl();
- userService.add();
- }
- }
4, 增加代理 UserServiceProxy
- public class UserServiceProxy implements UserService{
- private UserServiceImpl userService;
- 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 msg){
- System.out.println("使用了"+msg+"方法");
- }
- }
5, 优化测试类
- public class Client{
- public static void main(String[] args){
- UserServiceImpl userService = new UserServiceImpl();
- UserServiceProxy userServiceProxy = new UserServiceProxy();
- userServiceProxy.setUserService(userService);
- userServiceProxy.add();
- }
- }
AOP 再理解:
来源: http://www.bubuko.com/infodetail-3652019.html