zoukankan      html  css  js  c++  java
  • java的代理(编程思想)

    代理
    第三种关系被称为代理,java并没有提供对它的直接支持。这是继承和组合之间的中庸之道,因为我们将一个对象置于所要构造的类中(就像组合),但与此同时我们在新类中暴露了该成员对象的所有方法(就像继承)。
    public class SpaceShipControls {
    void up(int velocity) {}
    void down(int velocity) {}
    void left(int velocity) {}
    void right(int velocity) {}
    void forward(int velocity) {}
    void back(int velocity) {}
    void turboBoost() {}
    }

    /**
    * 使用继承得到太空船
    * 然而SpaceShip并非真正的SpaceShipControls类型,即便你可以告诉SpaceShip向前运动(forward())。更准确的讲,
    * SpaceShip包含SpaceShipControls,与此同时,SpaceShipControls的所有方法在SpaceShip中暴露出来了
    */
    class SpaceShip extends SpaceShipControls {
    private String name;
    public SpaceShip(String name) { this.name = name;}
    public String toString() { return name;}
    public static void main(String[] args) {
    SpaceShip protector = new SpaceShip("NSEA Protector");
    protector.forward(100);
    }
    }
    使用代理
    /**
    * 代理解决了上面的问题
    */
    class SpaceShipDelegation {
    private String name;
    private SpaceShipControls controls = new SpaceShipControls();
    public SpaceShipDelegation(String name) {
    this.name = name;
    }
    //Delegate methods
    public void back(int velocity) {
    controls.back(velocity);
    }
    public void down(int velocity) {
    controls.down(velocity);
    }
    public void forward(int velocity) {
    controls.forward(velocity);
    }
    public void left(int velocity) {
    controls.left(velocity);
    }
    public void right(int velocity) {
    controls.right(velocity);
    }
    public void turboBoost() {
    controls.turboBoost();
    }
    public void up(int velocity) {
    controls.up(velocity);
    }
    public static void main(String[] args) {
    SpaceShipDelegation protector = new SpaceShipDelegation("NSEA Protector");
    protector.forward(100);
    }
    }
    使用代理时可以拥有更多的控制力,因为我们可以选择只提供在成员对象中的方法的某个子集

    有没有发现代理和装饰者模式很像,区别应该是装饰着硬性要求提供所有基方法的访问接口。

  • 相关阅读:
    胜利大逃亡
    求最小环
    Prime算法
    网站根目录下没有正确的DNT.config文件 (不同类型错误更新中)
    Day4_代码重用与函数
    Day1_算法分析方法
    Day3_字符串操作与正则表达式
    错误解决一_call time passbyreference removed
    Day1_PHP快速入门
    silverlight 动态加载树形菜单[带图标],方法一
  • 原文地址:https://www.cnblogs.com/aigeileshei/p/7237457.html
Copyright © 2011-2022 走看看