当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:17:00  来源:本站整理

通过承当举行筹划[Java编程]

赞助商链接



  本文“通过承当举行筹划[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
学习了多形性的知识后,由于多形性是如此“聪明”的一种工具,所以看起来仿佛全部东西都应当担当.但假定过度利用担当技术,也会使自己的计划变得不必要地复杂起来.事实上,当我们以一个现成类为底子成立一个新类时,如首先挑选担当,会使情形变得非常复杂.
一个更好的思绪是首先挑选“合成”——假如不能非常肯定自己应利用哪一个.合成不会逼迫我们的程序计划进入担当的分级构造中.同时,合成显得越发机动,因为可以动态挑选一种范例(以及行为),而担当要求在编译期间精确地知道一种范例.下面这个例子对此举行了阐释:
//: Transmogrify.java
// Dynamically changing the behavior of
// an object via composition.

interface Actor {
  void act();
}

class HappyActor implements Actor {
  public void act() { 
    System.out.println("HappyActor"); 
  }
}

class SadActor implements Actor {
  public void act() { 
    System.out.println("SadActor");
  }
}

class Stage {
  Actor a = new HappyActor();
  void change() { a = new SadActor(); }
  void go() { a.act(); }
}

public class Transmogrify {
  public static void main(String[] args) {
    Stage s = new Stage();
    s.go(); // Prints "HappyActor"
    s.change();
    s.go(); // Prints "SadActor"
  }
} ///:~
在这里,一个Stage对象包含了指向一个Actor的句柄,后者被初始化成一个HappyActor对象.这意味着go()会产生特定的行为.但由于句柄在运行期间可以重新与一个差别的对象绑定或结合起来,所以SadActor对象的句柄可在a中得到替换,然后由go()产生的行为发生改变.这样一来,我们在运行期间就得到了很大的机动性.与此相反,我们不能在运行期间换用差别的情势来举行担当;它要求在编译期间完好决意下来.
一条通例的计划原则是:用担当表达行为间的差别,并用成员变量表达状况的改变.在上述例子中,二者都得到了利用:担当了两个差别的类,用于表达act()办法的差别;而Stage通过合成技术答应它自己的状况发生改变.在这种情形下,那种状况的改变同时也产生了行为的改变.
  以上是“通过承当举行筹划[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 通过承当扩大接口
  • 通过承当举行筹划
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .