私は真っ先にデザインパターンを読んでいて、これに気づきました。
「ハリウッドの原則、私たちに電話しないで、私たちはあなたに電話します」
これは、高レベルのコンポーネントが低レベルのコンポーネントに「私たちに電話しないでください、私たちはあなたに電話します」と伝えることを意味します
High-Level Component は、他の Low-Level コンポーネントで定義された BEHAVIOR を持つクラスです。
私の質問は...この例は、私たちに電話しないでください、私たちはあなたを呼ぶという原則に違反していますか?. これもState Patternを使った本から。
public class GumballMachine
{
//other state instance here
State NoQuarterState;
State HasQuarterState;
public GumballMachine(int numberGumballs)
{
NoQuarterState = new NoQuarterState(this);
HasQuarterState = new HasQuarterState(this);
//other state objects here assigning to state instance
}
public void insertQuarter()
{
state.insertQuarter();
}
void setState(State state)
{
this.state = state;
}
public State getHasQuarterState()
{
return hasQuarterState;
}
//more code here
}
================================================== ==================
public interface State
{
//abstract methods
}
================================================== ==================
public class NoQuarterState implements State
{
GumballMachine gumballMachine;
public NoQuarterState(GumballMachine gumballMachine)
{
this.gumballMachine = gumballMachine;
}
public void insertQuarter()
{
System.out.println("You inserted a quarter");
gumballMachine.setState(gumballMachine.getHasQuarterState()); // change the state to HasQuarterState
}
}
この例では、GumballMachineは独自のinsertQuarterBehaviorのためにNoQuarterStateのinsertQuarterBehavior()を必要とするため、これはGumballMachineクラスが高レベル コンポーネントであり、NoquarterStateクラスが低レベル コンポーネントであることを意味します。しかしNoQuarterStateクラスを見てください。このクラスは、 insertQuarter() Behaviorについて、 gumballMachine の setState()およびgetHasQuarterState()にも依存しています。
それらは互いに依存しています。回覧 - 依存関係