デザインパターン - noriyuki-shimizu/myClothes GitHub Wiki

★デザインパターン★

adapter 一皮かぶせて再利用

template method 具体的な処理をサブクラスに任せる

factory methood インスタンス作成をサブクラスにまかせる

singleton たった1つのインスタンス

prototype コピーしてインスタンスを作る

builder 複雑なインスタンスを組み立てる

abstract factory 関連する部品を組み合わせて製品を作る

bridge 機能の改装と実装の改装を分ける

strategy アルゴリズムをごっそり切り替える

composite 容器と中身の同一視

decorator 飾り枠と中身の同一視

visitor 構造を渡り歩きながら仕事をする

chain of responsibility 責任のたらいまわし

facade シンプルな窓口

mediator 相手は相談役1人だけ

observer 状態の変化を通知する

memento 状態を保存する

state 状態をクラスとして表現する

flyweight 同じものを共有して無駄をなくす

proxy 必要になってから作る

command 命令をクラスにする

interpreter 文法規則をクラスで表現する


factory method 例

public abstract class Product<T> {

	protected T ownerId;

	public Product(T ownerId) {
		this.ownerId = ownerId;
	}

	public Product() {}

	public abstract void method1();

	public abstract void method2();

}
public class ConcreteProduct extends Product<String> {

	public ConcreteProduct(String ownerId) {
		super(ownerId);
	}

	public ConcreteProduct() {}

	public void method1() {
		System.out.println("method1 !!");
	}

	public void method2() {
		System.out.println("method2 !!");
	}

}
public abstract class Creator<T> {

	protected Map<String, T> pool;

	public final T create(String ownerId) {
		//createProductを使ってインスタンスを取得
		return factoryMethod(ownerId);
	}

	protected abstract T factoryMethod(String ownerId);
	protected abstract T factoryMethod();

}
public class ConcreteCreator extends Creator<Product<String>> {

	public ConcreteCreator() {
		this.pool = new HashMap<String, Product<String>>();
	}

	protected Product<String> factoryMethod(String ownerId) {
		Product<String> product = this.pool.get(ownerId);
        if(product == null) {
        	product = new ConcreteProduct(ownerId);
            this.pool.put(ownerId, product);
        }
        return product;
	}

	protected Product<String> factoryMethod() {
        return new ConcreteProduct();
	}

}
public class Client {

	public static void main(String[] args) {
		Creator<Product<String>> creator = new ConcreteCreator(); // Creator は抽象クラスなので, Creator() コンストラクタが使えない.
		Product<String> product = creator.factoryMethod("p_logic");

		product.method1();
		product.method2();
	}

}
⚠️ **GitHub.com Fallback** ⚠️