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();
    }
}

             

相关文章
|
29天前
|
设计模式 Java 程序员
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
45 0
[Java]23种设计模式
|
12天前
|
设计模式 JavaScript Java
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
|
1月前
|
设计模式 监控 算法
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)
|
2月前
|
存储 设计模式 安全
Java设计模式-备忘录模式(23)
Java设计模式-备忘录模式(23)
|
2月前
|
设计模式 存储 算法
Java设计模式-命令模式(16)
Java设计模式-命令模式(16)
|
2月前
|
设计模式 存储 缓存
Java设计模式 - 解释器模式(24)
Java设计模式 - 解释器模式(24)
|
2月前
|
设计模式 安全 Java
Java设计模式-迭代器模式(21)
Java设计模式-迭代器模式(21)
|
2月前
|
设计模式 缓存 监控
Java设计模式-责任链模式(17)
Java设计模式-责任链模式(17)
|
2月前
|
设计模式 运维 算法
Java设计模式-策略模式(15)
Java设计模式-策略模式(15)
|
2月前
|
设计模式 算法 Java
Java设计模式-模板方法模式(14)
Java设计模式-模板方法模式(14)
下一篇
无影云桌面