"Product": Role 名 関数名 CreateProduct の Product と対応 ConcreteFactory::CreateProduct() { return new "Product" ( ) }
"objects": 変数? "structure": 未定義 "builder": Role Builder への aggregate のラベル "BuildPart": Role Builder のフック関数名 Role ConcreteBuilder で実装される Part は objects の型と対応している様子 Directo::Construct() { for all "objects" in "structure" "builder" . "BuildPart" ( ) }部品への関係が省略されているので 具体的な疑似コードを書くのは難しい.
"product": この関数内でのみ使われる一時的な変数名 "FactoryMethod": Role Creator のフック関数名 Role ConcreteCreator で実装される CreateAbstractClassName という名前が多い Iterator Pattern の Iterator::CreateIterator() もこれ Creator::AnOperation() { ... "product" = "FactoryMethod" ( ) ... } "ConcreteProduct": Role 名 Role ConcreteCreator と関連のある名前を つける場合が多いがそうでない場合もある ConcreteCreator::FactoryMethod() { return new "ConcreteProduct" ( ) }
"p": この関数内でのみ使われる一時的な変数名 "prototype": Role Prototype への参照のラベル "Clone": Role Prototype のフック関数名 Role ConcretePrototype で実装される 通常この名前そのまま. Client::Operation() { ... "p" = "prototype" . "Clone" ( ) ... } ConcretePrototype::Clone() { return copy of self }Clone は余りにバリエーションがあり過ぎて 疑似コードにするのが難しい.
Singleton::Instance() { # static 関数 return "uniqueInstance" }保留
クラスに適用する Adaptor パターン
"SpecificRequest": Role Adaptee で実装される任意の関数 既にあるもの Adaptor::Request() { "SpecificRequest" ( ) }
オブジェクトに適用する Adaptor パターン
"adapter": Role Adaptee への参照のラベル "SpecificRequest": Role Adaptee で実装される任意の関数 既にあるもの Adapter::Request() { "adapter" . "SpecificRequest" ( ) }
"imp": Role Implementor への aggregate のラベル "OperationImp": Role Implementor のフック関数 Role ConcreteImplementor で実装される 呼んでいる関数名となんか似たような名前にするべき だとは思う… Abstraction::Operation() { "imp" . "OperationImp" ( ) }
"g": 集約の要素ひとつを取り出して置いておくための変数 "children": Role Component への aggregate (集約) のラベル "Operation": Role Component のフック関数 SubRole Leaf, Composite で実装される 呼んでいる関数名と同名 Composite::Operation() { for all "g" in "children" "g" . "Operation" ( ) }
"component": Role Component への aggregate (単数)のラベル "Operation": Role Component のフック関数 SubRole ConcreteComponent, Decorator, 更に ConcreteDecorator で実装される 呼んでいる関数名と同名 Decorator::Operation() { "component" . "Operation" ( ) } ConcreteDecorator::Operation() { "Decorator" :: "Operation" ( ) "AddedBehaivior" ( ) }
一切の疑似コードはなし
"flyweights": Role Flyweight への aggregate (集約)のラベル "key": 引数,文字とかハッシュ値とかそんなようなもの "flyweight": 新規の Flyweight を入れとく一時的な変数 "Flyweight": Role 名 FlyweightFactory::GetFlyweight(key) { if ( "flyweights" [ "key" ] exists ) { return "flyweights" [ "key" ] } else { "flyweight" = new "Flyweight" # ここは怪しいので保留 add "flyweight" to "flyweights" return "flyweight" } }
"realSubject": Role RealSubject への参照のラベル "Request": Role RealSubject で定義される任意の関数 名前はなんでもいい Proxy::Request() { ... "realSubject" . "Request" ... }
図そのものにはない
"successor": Role Handler への参照のラベル "HandleRequest": Role Handler のフック関数(半具象) デフォルトの振舞をもつ Role ConcreteHandler で実装される Handler::HandleRequest() { "successor" . "HandleRequest" ( ) } ConcreteHandler::HandleRequest() { if can handle { "ResolveRequest" ( ) } else { "Handler" :: "HandleRequest" ( ) } }このあたりは保留….
"receiver": Role Receiver への参照のラベル "Action": Role Receiver で定義される任意の関数 名前はなんでもいい ConcreteCommand::Execute() { "receiver" . "Action" ( ) }
特になし?
"ConcreteIterator": Role 名 ConcreteAggregate::CreateIterator() { return new "ConcreteIterator" ( this ) } 図には記述がない "target": ConcreteAggregate への参照のラベル(図にはない) "aggr": 引数 ConcreteIterator::ConcreteIterator(ConcreteAggregate aggr) { "target" = "aggr" }
特になし?
"state": メンバ変数 "m": 引数 "GetState": Role Memento で定義される関数 この意味を維持した名前が良い Originator::SetMemento(Memento m) { "state" = "m" . "GetState" ( ) } "Memento": Role 名 "state": メンバ変数 Originator::createMemento() { return new "Memento" ( "state" ) } 状態を入れておくクラスを補充した方が良さそう… state のクラス
"o": 変数 "observers": Role Observer への aggregate (集約)のラベル "Update": Role Observer のフック関数 Role ConcreteObserver で実装されるがみな同じ? この意味を維持した名前が良い Subject::Notify() { for all "o" in "observers" "o" . "Update" } "subjectState": メンバ変数 ConcreteSubject::GetState() { return "subjectState" } "observState": メンバ変数 "subject": Role ConcreteSubject への参照のラベル "GetState": Role ConcreteSubject ので定義される関数 この意味を維持した名前が良い ConcreteObserver::Update() { "observState" = "subject" . "GetState" }これも状態を入れておくクラスを補充した方が良さそう…
"state": Role State への aggregate のラベル "Handle": Role State のフック関数 Role ConcreteState で実装される 名前は自由 Context::Request() { "state" . "Handle" ( ) }
図には記述がない 余りに一般的すぎるパターン
"strategy": Role Strategy への aggregate のラベル "AlgorithmInterface": Role Strategy のフック関数 Role ConcreteStrategy で実装される 名前は自由 Context::ContextInterface() { "strategy" . "AlgorithmInterface" ( ) }
"PrimitiveOperation": Role AbstractClass のフック関数 Role ConcreteClass で実装される 名前は自由 AbstractClass::TempleteMethod() { ... "PrimitiveOperation" ( ) ... }
"v": 引数 "VisiteConcreteElement": Role Visitor のフック関数 Role ConcreteVisitor で実装される Visit + Role 名 とすることが多い ConcreteElement::Accept(Visitor v) { "v" . "VisiteConcreteElement" ( this ) }