zoukankan      html  css  js  c++  java
  • java代理模式

    代理模式

      英文:Proxy Pattern,23种java常用设计模式之一

    定义:对其他对象提供一种代理以控制对这个对象的访问。

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

    思想:为了提供额外的处理或者不同的操作而在实际对象与调用者之间插入一个代理对象。这些额外的操作通常需要与实际对象进行通信。、

    应用举例:

    假设有一个接口,IRun(),里面有一个空的run()  (跑),所以有Animal都实现(implements)这个方法。但是有的animal比较高级,在跑的时候还可以sing() (唱歌),我们不能直接修改IRun()接口,也不能在Animal的通用方法中单独添加这个方法(因为用到这个新增方法的毕竟是少数)。这样就需要一个代理类RunProxy来为会sing()的特殊animal添加一个单独的sing(),最后在客户端调用代理类。代码如下:

    接口类 IRun:

    public interface IRun {
        public void run(String animal_name);
    }

    实现类Animal:

    public class Animal implements IRun{
        @Override
        public void run(String animal_name) {
            System.out.println("现在是" + animal_name + "在跑!");
        }
    }

     代理类 RunProxy:

    public class RunProxy implements IRun{
        IRun irun;
        public RunProxy(IRun irun) {
            this.irun = irun;
        }
        
        @Override
        public void run(String animal_name) {
            irun.run(animal_name);
        }
        
        public void run(String animal_name, String singname) {
            irun.run(animal_name);
            sing(singname);
            
        }
    
        private void sing(String singname) {
            System.out.println("在唱:" + singname);
        }
    }


     客户端:

    public class TestProxy {
    
        public static void main(String[] args) {
            // 不需要执行额外方法的
            System.out.println("*****不需要执行额外方法的****");
            IRun animal1 = new Animal();
            animal1.run("猪");
    
            // 需要执行额外方法的
            System.out.println("*****需要执行额外方法的****");
            RunProxy run = new RunProxy(animal1);
            run.run("猪", "猪很肥呀猪很肥~~");
        }
    
    }
  • 相关阅读:
    C#开发串口总结,并提炼串口辅助类到公用类库中
    sharepoint Lists Web service 用法
    .NET简谈策略模式
    细说 Form (表单)
    步步为营 SharePoint 开发学习笔记系列 一、简介
    Memcached进行缓存层设计
    各大主流.Net的IOC框架性能测试比较
    十年磨一剑,BloodyAngel!
    hosts
    新浪微薄的挂件
  • 原文地址:https://www.cnblogs.com/goldeneast/p/3413822.html
Copyright © 2011-2022 走看看