7. p Product
p factory methodが生成するオブジェクトのインタフェースを定義する
p ConcreteProduct
p Productクラスのインタフェースを実装する
p Creator
p Product型のオブジェクトを返すfactory methodを宣言する
p ConcreteCreator
p ConcreteProduct クラスのインスタンスを返すように、factory method をオー
バーライドする
7
8. public class YoshinoyaGyudon implements Gyudon
public interface Gyudon
public class SukiyaGyudon implements Gyudon
public interface GyudonCreator {
Gyudon createGyudon();
public class GyudonCreator implements GyudonCreator {
public Gyudon createGyudon() {
・・・
8
11. p Context
p クライアントに必要なインタフェースを定義する
p 状態を表すConcreteStateクラスのインスタンスを保持する
p State
p Contextクラスの個々の状態に関する振る舞いをカプセル化するための
インタフェースを定義する
p ConcreteState
p Contextクラスの1つの状態に関する振る舞いが実装される
11
12. public interface ColleagueState {
Behavior letsDrink();
public class Colleague {
private ColleagueState state;
public Behavior letsDrink() {
return state.letsDrink();
public class WorkingState implements ClleagueState {
public Behavior letsDrink() {
return Behavior.REJECT;
public class AfterWorkState implements ClleagueState {
public Behavior letsDrink() {
return Behavior.OK;
12
15. p Component
p composite 内のオブジェクトのインタフェースを宣言する
p すべてのクラスに共通なインタフェースのデフォルトの振る舞いを適宜
実装する
p Leaf
p Composite 内の末端のオブジェクトを表す。
つまりleafは子オブジェクトを持たない。
p Composite
p 子オブジェクトを持つComponentの振る舞いを定義する。
15
16. public class Address extends Location {
public String toString() {
・・・
public abstract class Location {
public List<Address> getInner();
public class Area extends Location {
public List<Address> getInner() {
・・・
16
19. p Command
p オペレーションを実行するためのインターフェイスを宣言する
p ConcreteCommand
p Receiverオブジェクトとアクションの間のつながりを定義する
p Execute オペレーションを、Receiver オブジェクトに対して該当するオペレーションの呼び出し
を行うように実装する
p Invoker
p command に要求を実行するように依頼する
p Receiver
p 要求を実現するためにオペレーションをいかに実行するのかを知っている。任意のクラスが
Receiver になり得る
19
20. public class TextPaste implements Command {
private Document doc;
public void execute() {
doc.paste();
public interface Command {
public void execute();
public class Application {
・・・
menuItem.onClick() {
menuItem.getCommand().execute();
20