OOP 问题:扩展类、覆盖函数和类似 jQuery 的语法

2024-01-01

我有一个与 Flash、actionscript 3 相关的 OOP 问题。这是一个个人项目,我正在寻找解决此问题的设计模式或解决方法,我的目标是学习新东西。

我创建了一个名为 Chain 的类。我创建这个 util 类是为了使延迟函数调用变得容易。您可以通过以毫秒为单位的延迟添加函数来创建函数链。该链可以执行多次,甚至可以以相反的顺序执行。该类具有返回自身的函数。这使得 jQuery 风格的语法成为可能,如下所示:

var chain:Chain = new Chain(); 
chain.wait(100).add(myFunction1,300).wait(300).add(myFunction2,100);
// etc..

对于这个例子,我留下了很多函数只是为了演示这个问题。 Chain 类主要用于添加功能和启动/停止链。

public class Chain 
{  
 function wait(delay:int = 0):Chain
 {
   // do stuff
   return this;
 }

 public function add(func:Function, delay:Number = 0):Chain
 {
      list.push( new ChainItem(func, delay) );
      return this;
 }
}

现在,我有另一个类,称为 ChainTween。我正在尝试将事情分开,以保留 Chain 的一些核心功能,并让 ChainTween 做一些动画技巧。我的想法是创建一个基于 Chain 类的小型补间引擎。目前它扩展了Chain。它使用了 Chain 类中的大量受保护变量,并覆盖了 Chain 的一些核心函数,以在 Chain 的进程中添加补间函数。

public class ChainTween extends Chain
{  
 function animate(properties:Object = null, duration:Number = 0, easing:Function = null):ChainTween
 {
   // do stuff
   return this;
 }
}

现在问题是:我想保留链接语法,但 wait() 返回一个 Chain 实例,而 Chain 没有动画函数。

var chain:ChainTween = new ChainTween();
chain.wait(100).animate({x:200}, 100).wait(250);

我尝试重写 ChainTween 类中的 wait() 和 add() 函数,但这会导致不兼容的重写。

我可以将 chain.wait(100) 转换为 ChainTween,但这非常丑陋,而且当我链接很多它们时没有用。现在我不想将任何 ChainTween 函数添加到 Chain(也没有虚拟函数),并且我想保持所有函数的完成,因此返回 Object 也不是一个选项。我尝试使用接口,但这给出了同样的问题,因为接口的功能应该在实现它的类中实现。

现在我考虑过在 ChainTween 中创建一个 Chain 实例,但这不允许我重写函数,然后我应该将很多属性设为公共而不是受保护,这也不是首选。

这可能吗?有人对此有很好的解决方案吗?


这个问题很常见。您正在使用的设计模式称为流畅的界面 http://en.wikipedia.org/wiki/Fluent_interface如果你用谷歌搜索“Fluent Interface Inheritance”,你会发现很多问题,但答案却很少。

C#、Java 中解决该问题的常用方法C++就是使用模板 https://stackoverflow.com/questions/1041342/fluent-interfaces-and-inheritance-in-c。但是,我不知道如何在 AS3 中实现相同的功能,我发现这个话题 https://stackoverflow.com/questions/1578255/templates-for-as3-like-c这可能对你有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OOP 问题:扩展类、覆盖函数和类似 jQuery 的语法 的相关文章

  • ActionScript 2 移动对象

    我对 ActionScript 知之甚少 我有一个电影剪辑 我希望当我按下按钮 按钮或影片剪辑 时它沿 x 轴移动我不知道要使用什么代码 因为它需要是 Action Script 2 是否有教程或其他东西可以完成此任务 我找到了一个教程 当
  • Javascript 桥接到 Flash 以在 Flash 中存储 SO“cookie”

    读完这个问题后如何唯一地识别访问我网站的计算机 https stackoverflow com questions 216542 how do i uniquely identify computers visiting my web si
  • 抽象类、接口、mixins

    有人可以向我解释一下两者之间的区别吗抽象类 接口 and mixins 我之前在代码中使用过它们 但我不知道技术差异 抽象类 抽象类是不被设计为实例化的类 抽象类可以没有实现 部分实现或全部实现 抽象类旨在允许其子类共享公共 默认 实现 抽
  • 有哪些基于对象的 shell?

    我打算写一个面向对象的shell 基于Python 我已经有很多想法了 但在实现它之前 我想通过一些现有的 shell 来激发我的灵感 我所说的面向对象的基本意思是 参数不仅仅是字符串数组 而且是对象数组 返回值也是一个对象 不仅有 std
  • 从相机录制视频、叠加位图、添加音频、保存到设备,所有这些都在 as3/AIR mobile 中进行

    我的任务是在移动设备上录制来自摄像头的实时视频流 然后覆盖随时间变化的位图 并将音频 mp3 轨道添加到视频文件中 然后将其保存到设备上的某个位置 例如相机胶卷 我看到了一些有用的帖子 主要是这个 AS3 Flash AIR 使用网络摄像头
  • 覆盖默认标识符生成策略对关联没有影响

    交响乐 2 7 2 学说 ORM 2 4 7 MySQL 5 6 12 PHP 5 5 0 我有一个具有自定义 ID 生成器策略的实体 它工作完美 在某些情况下 我必须使用 手工制作 的 ID 来覆盖此策略 当主实体在没有关联的情况下被刷新
  • 使用正则表达式如何从十进制数中删除尾随零

    我需要编写一些正则表达式 它接受一个数字并删除小数点后的所有尾随零 语言是 Actionscript 3 所以我想写 var result String theStringOfTheNumber replace the regex 例如 3
  • 通过Javascript捕获右键单击,无需节点

    当使用英语以外的任何其他语言时 Flash 播放器在 Firefox Chrome 中使用 wmode window 以外的任何内容时都会出现错误 此错误已报告但尚未修复 http bugs adobe com jira browse FP
  • 如何重置加速度计事件 As3

    在我的项目中 在游戏开始时加速计事件工作正常 当游戏到达游戏结束页面并单击重新启动按钮时 重新启动整个游戏时 所有对象都工作良好 所有值也已重置 但加速计不起作用 提前致谢 代码如下 if Accelerometer isSupported
  • 我可以使用子接口重新编译公共 API 并保持二进制兼容性吗?

    我有一个公共 API 在多个项目中多次使用 public interface Process
  • 在 AS3 中创建一个(适当的)计时器

    如何在as3中创建时间计数器 在 google 上进行一些简单的搜索 您会找到 AS3 类 Timer 它实际上是事件计数器 不是一个合适的时间计数效用 我见过这个http blogs adobe com pdehaan 2006 07 u
  • 委托给子组件的模式

    在我正在工作的产品中 非常基本的场景之一是类的序列化 通常 要序列化的类会在其子组件上调用序列化 例如如果有一个类 s t 班级 A B C D 那么A Pack会调用pack B C D 上的函数 由于有很多这样的类 因此必须一遍又一遍地
  • 用于在运行时使用附加信息增强 Java 中现有数据结构的设计模式

    我将从一个小例子开始 想象一个具有几个实体的应用程序 实体A 1 n gt 实体B 1 n gt 实体C 假设我们有一个返回 EnityC 实例列表的服务方法 在 UI 中 我们想要显示 EntityC 但也向仅与 UI 相关的实体添加一些
  • 我们可以实例化一个抽象类吗?

    在一次采访中 有人问我 我们是否可以实例化一个抽象类 我的回答是 不 我们不能 但是 面试官告诉我 错了 我们可以 我对此争论了一下 然后他告诉我自己在家尝试一下 abstract class my public void mymethod
  • 我们还需要迭代器设计模式吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Microsoft 的并行模式库:有人想知道移植到 POSIX / Linux 有多困难吗?

    该书已出版 http blogs msdn com b vcblog archive 2011 03 15 10139453 aspx http blogs msdn com b vcblog archive 2011 03 15 1013
  • 移动影片剪辑时的视觉错误

    在我尝试创建一个简单的类似乒乓球的游戏时 我遇到了一个非常奇怪的 有时甚至是严重的视觉错误 当我设置球 Flash CS 5 5 库 MovieClip 以相当快的速度在屏幕上移动时 我注意到有时球的边缘会在其移动方向上被短暂切断 当它发生
  • 在 ActionScript 中刷新数据网格时保持选择

    我正在使用 flashbuilder 开发我的第一个 AIR 应用程序 只是让您知道 我已经绑定了一个mx DataGrid组件到一个DataProvider这是一个mx HTTPService获取包含项目的 xml 文件 为了使数据保持最
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • 如何查找类中未定义的虚函数

    我正在将游戏从 Windows 移植到 Mac 在这里我遇到了一堆链接器错误 所有错误类似于 未定义的符号 typeinfo for Baseclass 引用自 typeinfo for Subclass Subclass oor 从 ZT

随机推荐