码迷,mamicode.com
首页 > 其他好文 > 详细

23种设计模式-静态代理模式

时间:2020-06-21 09:44:21      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:业务   bsp   收费   ack   操作   ble   模式   list   string   

 

代理模式的分类:

 

  • 静态代理

  • 动态代理  

 

 

技术图片

 

 

 

  1. 接口

     //租房
     public interface Rent {
         public void rent();
     }
  2. 真实角色

     //房东
     public class Host implements Rent {
         public void rent(){
             System.out.println("房东要出租房子!");
        }
     }
  3. 代理角色    通过组合的方式 将房东带进来

     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("收取中介费用");
        }
     }
  4. 客户端访问

     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种设计模式-静态代理模式

标签:业务   bsp   收费   ack   操作   ble   模式   list   string   

原文地址:https://www.cnblogs.com/yppaopao/p/13171383.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!