Java23设计模式(课时八)代理模式

简介: Java23设计模式(课时八)代理模式

简介

代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。


著名的代理模式例子为引用计数(英语:reference counting)指针对象。


当一个复杂对象的多份副本须存在时,代理模式可以结合享元模式以减少存储器用量。典型作法是创建一个复杂对象及多个代理者,每个代理者会引用到原本的复杂对象。而作用在代理者的运算会转送到原本对象。一旦所有的代理者都不存在时,复杂对象会被移除。


组成

抽象角色:通过接口或抽象类声明真实角色实现的业务方法。

代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。

真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用


优点

(1).职责清晰

真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。

(2).代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了中介的作用和保护了目标对象的作用。

(3).高扩展性 [1]


模式结构

一个是真正的你要访问的对象(目标类),一个是代理对象,真正对象与代理


对象实现同一个接口,先访问代理类再访问真正要访问的对象。


代理模式分为静态代理、动态代理。


静态代理是由程序员创建或工具生成代理类的源码,再编译代理类。所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。


动态代理是在实现阶段不用关心代理类,而在运行阶段才指定哪一个对象


案例一  房东  中介  用户 三者之间的联系

package coms.Design.Mode.Demo1;
/**
 * 代理模式
 */
public interface Rent {
    public  void  rent();
}
package coms.Design.Mode.Demo1;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
public class Proxy implements Rent {
    private Host host;
    public Proxy() {
    }
    public Proxy(Host host) {
        this.host = host;
    }
    @Override
    public void rent() {
        host.rent();
    }
    //看房子
    public void seeHse() {
        System.out.println("中介带你看房子");
    }
    //收费
    public void money() {
        System.out.println("收中介费");
    }
    //合同
    public void Heh() {
        System.out.println("合同");
    }
}
package coms.Design.Mode.Demo1;
//房东  租房
public class Host implements Rent{
    @Override
    public void rent() {
        System.out.println("房东要租房子,要出租房子");
    }
}
package coms.Design.Mode.Demo1;
/**
 * 操作的内容单一
 */
public class Client {
    public static void main(String[] args) {
        Host host=new Host();
//        host.rent();
        //代理
        Proxy proxy = new Proxy(host);
        proxy.rent();
        proxy.seeHse();
        proxy.money();
        proxy.Heh();
    }
}

案例二 代理模式的更深层次的理解 以数据库的增删改查为例

package coms.Design.Mode.Demo02;
public interface UserService {
    void  adds();
    void delete();
    void  update();
    void  query();
}
package coms.Design.Mode.Demo02;
/**
 * 正式的对象
 */
public class UserServiceImp  implements  UserService{
    @Override
    public void adds() {
        System.out.println("增加一条数据");
    }
    @Override
    public void delete() {
        System.out.println("删除一条数据");
    }
    @Override
    public void update() {
        System.out.println("修改一条数据");
    }
    @Override
    public void query() {
        System.out.println("查询一条数据");
    }
}
package coms.Design.Mode.Demo02;
public class UserServiceProxy implements UserService {
   private   UserServiceImp userService;
    public void  setUserService(UserServiceImp userService){
        this.userService=userService;
    }
    @Override
    public void adds() {
        log("增加");
        userService.adds();
    }
    @Override
    public void delete() {
        log("修改");
        userService.delete();
    }
    @Override
    public void update() {
        userService.update();
    }
    @Override
    public void query() {
        userService.query();
    }
    //日
    public  void  log(String msg){
        System.out.println("使用了msg想方法");
    }
}
package coms.Design.Mode.Demo02;
public class Client {
    public static void main(String[] args) {
        UserServiceImp userService=new UserServiceImp();
//        userService.adds();
//        userService.delete();
//        userService.query();
//        userService.update();
        UserServiceProxy proxy=new UserServiceProxy();
        proxy.setUserService(userService);
        proxy.adds();
    }
}

             

相关文章
|
17天前
|
存储 设计模式 安全
Java设计模式-备忘录模式(23)
Java设计模式-备忘录模式(23)
|
17天前
|
设计模式 存储 算法
Java设计模式-命令模式(16)
Java设计模式-命令模式(16)
|
17天前
|
设计模式 Java
Java设计模式-装饰器模式(10)
Java设计模式-装饰器模式(10)
|
17天前
|
设计模式 Java 程序员
Java设计模式-适配器模式(8)
Java设计模式-适配器模式(8)
|
17天前
|
设计模式 存储 缓存
Java设计模式 - 解释器模式(24)
Java设计模式 - 解释器模式(24)
|
17天前
|
设计模式 安全 Java
Java设计模式-迭代器模式(21)
Java设计模式-迭代器模式(21)
|
17天前
|
设计模式 缓存 监控
Java设计模式-责任链模式(17)
Java设计模式-责任链模式(17)
|
17天前
|
设计模式 运维 算法
Java设计模式-策略模式(15)
Java设计模式-策略模式(15)
|
17天前
|
设计模式 算法 Java
Java设计模式-模板方法模式(14)
Java设计模式-模板方法模式(14)
|
17天前
|
设计模式 存储 安全
Java设计模式-组合模式(13)
Java设计模式-组合模式(13)

热门文章

最新文章