- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个与 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 类的小 tweenengine 的想法。目前它扩展了 Chain。它使用了 Chain 类中的大量 protected 变量,并重写了 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 也不是一个选项。我尝试使用接口(interface),但这会产生同样的问题,因为接口(interface)的功能应该在实现它的类中实现。
现在我考虑过在 ChainTween 中创建一个 Chain 实例,但这不允许我重写函数,然后我应该将许多属性设为 public 而不是 protected,这也不是首选。
这可能吗?有人对此有很好的解决方案吗?
最佳答案
这个问题很常见。您使用的设计模式称为 Fluent Interface如果你用谷歌搜索“Fluent Interface Inheritance”,你会发现很多问题和很少的答案。
在 C#、Java 和 C++ is to use templates 中解决它的常用方法.但是,我不知道如何在 AS3 中实现相同的功能,我找到了 this topic那可能对你有帮助。
关于flash - OOP 问题 : Extending a class, 覆盖函数和类似 jQuery 的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4469400/
我是一名优秀的程序员,十分优秀!