2017-07-07 10 views
2

JavaScriptに関する質問があります。仮想ペンを想像してみてください。ペンにはペンが1つしか付くことができませんが、ペンにはさまざまなペン先があります。私はペンオブジェクトを作成し、それにペン先を割り当てたいと思います。ペン先は、ペンのプロパティとメソッドにアクセスする必要があります。交換可能なペン先が付いたJavaScriptペンオブジェクト

おそらくこれはよく知られているデザインパターンです。このデザインパターンの名前は何ですか?

function Pen() { 
    var p1=5; 
    this.nib=null; 
} 

function Nib1() { 
    // needs access to p1. 
} 

function Nib2() { 
    // needs access to p1. 
} 

var p = new Pen(); 
var n1 = new Nib1(); 
p.nib = n1; 
// n1 needs access to p1 
+1

私は正直言って良いデザインではないので、そのようなパターンはありません。何かあれば私はこれを反パターンと考えます。これらのクラス間で循環依存関係が作成されます(なぜなら、NibはPenにアクセスする必要があると言いますが、なぜですか?)、これは常に悪いことです。ストラテジーパターンのようなものは、そのような問題に対処することになっています。 –

+1

「p1へのアクセスが必要」という意味はどうですか?可能な限り循環依存を避けるために、一般にアクセスは一方向です(https://en.wikipedia.org/wiki/Circular_dependency)。多分、OOPの概念に関するこれらの考えはあなたを助けるだろうか? (http://www.adobe.com/devnet/actionscript/learning/oop-concepts/composition-and-aggregation.htmlまたはhttps://stackoverflow.com/questions/2218937/has-a-is-a-terminology -in-object-oriented-language) ペンがペン先ペンを持っていて、ペン先がペン先生の関数に渡すいくつかの情報に依存する "コンポジション"を探している気がします。 –

+0

あなたが奇妙なアナロジーを作っているのか、jsでペンを作成したいのか分かりません。あなたは、通常、この種の共依存関係から離れることを望んでいます...関数型プログラミングとクロージャーを見てみてください。それはJSを使用するための堅実な方法です。 JSを使ってOOP全体のルートを下げることはかなり面倒です。 –

答えて

0

コンストラクタのように聞こえます。この章では、同様の状況を説明しますが、ペンの代わりにウサギを使用します:http://eloquentjavascript.net/06_object.html#constructors

ペンは、コンストラクタのようになります。

function Pen(nib) { 
    // shared scope 
    this.nib = nib; 
} 

次にあなたが

var bluePen = new Pen(blue) 

を作成することができます...私はあなたが単一のペンを説明し、コンストラクタとしているので、それは少し違うと思いますが、あなたは複数のインスタンスで終わることができます。

関連する問題