java实现23种设计模式之代理模式

看代码:

package com.ceshi7;

public interface Sourceable {
    public void method();
}
package com.ceshi7;

public class Source implements Sourceable{

    @Override
    public void method() {
        System.out.println("这是原方法!");
    }

}
package com.ceshi7;

public class Proxy implements Sourceable{
    private Source source;
    public Proxy(){
        super();
        this.source = new Source();
    }
    @Override
    public void method() {
        before();
        source.method();
        atfer();
    }
    private void atfer() {
        System.out.println("代理之后!");
    }
    private void before() {
        System.out.println("代理之前!");
    }
}
package com.ceshi7;

public class ProxyTest {
    public static void main(String[] args) {
        Sourceable source = new Proxy();
        source.method();
    }
}

测试结果:

忽然发现该代理模式和之前的装饰器模式极其相似。

区别仅在于需要用到的装饰器模式调用时引入了一个对象,而代理模式并没有;

但是其中思想并不同,装饰器模式只是将引用的类进行装饰,也就是用来扩展;

而代理模式则是用来代理处理一些相关事物。

所以修改的话使用代理模式是对代理类进行修改。装饰器模式是对接口的实现进行扩展。

一个是修改,一个是增加。两者经常结合使用。

感觉是增加一个装饰类仿佛是增加一个代理类,可以这么理解。

代理模式的应用场景:
如果已有的方法在使用的时候需要对原有的方法进行改进,此时有两种办法:
1、修改原有的方法来适应。这样违反了“对扩展开放,对修改关闭”的原则,即闭包原则。
2、就是采用一个代理类调用原有的方法,且对产生的结果进行控制。这种方法就是代理模式。
使用代理模式,可以将功能划分的更加清晰,有助于后期维护。

即我们需要修改时只要修改代理类就可以了。

原文地址:https://www.cnblogs.com/zhengyuanyuan/p/10749278.html

时间: 2024-08-01 17:15:27

java实现23种设计模式之代理模式的相关文章

Java经典23种设计模式之创造型模式(二)

本文记录5种创造型模式的剩下两种:建造者模式(Builder).原型模式(PROTOTYPE). 一.建造者模式(别名:生成者模式) 将复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示.一个完整的建造者模式包含以下几个概念: 1.产品类 Product public class Person { private String head; private String body; private String foot; public String getHead() { ret

Java经典23种设计模式之创造型模式(一)

设计模式被称为程序猿的内功,之前零零散散的看过一大部分,但自己么有总结过.故此次在这里总结下.值得一提的是,设计模式并不是Java所特有.由于一直搞Android.这里就用Java为载体.最经典的设计模式有23种,分三个大类型: 创建型模式(5) .结构型模式(7).行为型模式(11),5 + 7 +11 = 23.网上一搜也都是一大把了,这里不过个人作的记录.本文记录创造型模式里的工厂方法(Factory Method).抽象工厂(Abstract Factory).单例模式这三种.力求透彻.

23种设计模式之代理模式(Proxy)

代理模式是一种对象结构型模式,可为某个对象提供一个代理,并由代理对象控制对原对象的引用.代理模式能够协调调用者和被调用者,能够在一定程度上降低系统的耦合度,其缺点是请求的处理速度会变慢,并且实现代理模式需要额外的工作. 优点: 1)远程代理可以隐藏对象位于不同的地址空间的事实. 2)虚拟代理可以执行优化操作,例如根据需要创建一个对象. 使用场景:需要比简单的指针更灵活.更全面的对象引用. Proxy 模式

23种设计模式之代理模式

代理模式的定义 代理模式是一个使用率非常高的模式,其定义为: 为其他对象提供一种代理以控制对这个对象的访问 代理模式也叫做委托模式, 它是一项基本设计技巧. 许多其他的模式, 如状态模式.策略模式.访问者模式本质上是在更特殊的场合采用了委托模式, 而且在日常的应用中, 代理模式可以提供非常好的访问控制. 代理模式的通用类图如下: 图中三个角色的定义: Subject抽象主题角色, 抽象主题角色可以是抽象类也可以是接口, 是一个最普通的业务类型定义,无特殊要求 RealSubject具体主题角色,

java实现23种设计模式之解释器模式

解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式. 这种模式实现了一个表达式接口,该接口解释一个特定的上下文.这种模式被用在 SQL 解析.符号处理引擎等. 构建语法树,定义终结符与非终结符. 应用实例:编译器.运算表达式计算. package com.ceshi22; public interface Expression { public int interpret(Context context); } package com.ces

Java经典23种设计模式之结构型模式(三)------附代理模式、适配器模式、外观模式区别

本文介绍7种结构型模式里的剩下两种:享元模式.代理模式. 一.享元模式FlyWeight 享元模式比较简单且重要,在很多场合都被用到,只不过封装起来了用户看不到.其概念:运用共享内存技术最大限度的支持大量细粒度的对象.这个概念给的有些抽象,说白了就是如果内存中存在某个对象A,如果再次需要使用对象A的时候如果内存中有A这个对象就直接使用它,不要再次new了.如果没有,则重新new一个.基于这个特点,享元模式使用时一般会给待访问对象传递一个Tag,用来标识这个对象,而且要同时使用抽象工厂的方法进行访

Java经典23种设计模式之结构型模式(一)

结构型模式包括7种:适配器模式.桥接模式.组合模式.装饰模式.外观模式.享元模式.代理模式. 本文主要介绍适配器模式和桥接模式. 一.适配器模式(Adapter) 适配器模式其实很简单,就像手机充电器一样,手机需要5V的,而插座出来是220V.因此需要充电器变压就ok.再比如,一个之会说汉语的和一个只会说英语的无法沟通,那就中间请个翻译.所有的交流通过翻译,翻译翻给会说英语的,就能完成一次单项交流的.链接1 中的例子非常生动形象了.总结一下,无非就是有个通用的接口(称为Target),如果一切顺

Java经典23种设计模式之结构型模式(二)

接上篇,本文介绍结构型模式里的组合模式.装饰模式.外观模式. 一.组合模式(Composite) 组合模式:将对象组合成树形结构,表示"部分--整体"的层次结构.最终达到单个对象和组合对象的使用具有一致性.单看这句话貌似有点抽象,其实比较简单. 以李云龙的独立团为例,目的要统计赵嘉宇一战共歼灭敌人多少个.最高的级别是团,一个团有若干个营,一个营有若干个排,一个排有若干个战士.(为了简化问题,排下面就不设行政单位了).很自然的,李云龙给营长开会回去给老子统计.营长回去给各个排长开会,赶紧

Java经典23种设计模式之行为型模式(三)

本文接着介绍11种行为型模式里的备忘录模式.观察者模式.状态模式. 一.备忘录模式 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可以将该对象恢复到原先保存的状态.还是比较好理解的. 1.Memento 备忘录存储原发器对象的内部状态,这个类就是要存储的对象的状态.状态需要多少个变量,在Memento里就写多少个变量. public class Memento { private String state; public Meme*to(String st