私は、FlashとのOOP関連の問題を持っています。これは個人的なプロジェクトで、私はこの問題のデザインパターンや回避策を探しています。目標は新しいものを学ぶことです。OOPの問題:クラスを拡張し、関数とjQueryのような構文をオーバーライドする
私はChainというクラスを作成しました。私はこの関数を作成し、遅延関数呼び出しを容易にしました。ミリ秒単位の遅延を加えて、一連の関数を作成することができます。このチェーンは、逆の順序でも複数回実行できます。このクラスには、それ自身を返す関数があります。私は、問題を実証するための機能の多くを残している。例えば
var chain:Chain = new Chain();
chain.wait(100).add(myFunction1,300).wait(300).add(myFunction2,100);
// etc..
:それはjQueryのは、このような構文を持つスタイリングすることが可能となります。 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があります。私はいくつかのコア機能を持つチェーンを維持するために物事を分割しようとしているし、ChainTweenはいくつかのアニメーションのトリックをしています。私は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;
}
}
は今、これは問題です:私は()チェーンのインスタンスを返す連鎖構文を保つが、待ちたいとチェーンにはアニメーション機能を持っていません。
var chain:ChainTween = new ChainTween();
chain.wait(100).animate({x:200}, 100).wait(250);
私はChainTweenクラスでwait()関数とadd()関数をオーバーライドしようとしましたが、互換性のないオーバーライドが発生します。
私はChainTweenとしてchain.wait(100)をキャストすることができましたが、これは非常に醜いものであり、たくさん連鎖しているときは役に立たないです。 ChainTween関数をChainに追加したくないので(ダミー関数もありません)、すべての関数を補完したいので、Objectを返すこともオプションではありません。私はインターフェイスを使用しようとしましたが、インターフェイスの機能はそれを実装するクラスで実装する必要があるため、同じ問題が発生します。
ChainTween内でChainのインスタンスを作成することを考えましたが、これで関数をオーバーライドすることはできません。次に、protectedの代わりにたくさんのプロパティをpublicにする必要があります。
これは可能ですか?これには誰かが素晴らしい解決策を持っていますか?
ありがとうございましたこの回答は非常に解決策を見つけるのに役立ちます。 –