刺身タンポポ職人なう

文系女子大生がエンジニアとして就職してその後

Factory Method ってなに?

他のクラスのインスタンス化の責任を負う必要がある普通の実装。

class Sample {
    class showName() {
        Name name = new AName();
        System.out.println(name.getName()); // I'm A
        Name name = new BName();
        System.out.println(name.getName()); // I'm B
    }
}

abstract class Name {
    abstract void getName();
}

class AName extends Name {
    void getName() {
        System.out.println ("I'm A");
    }
}

class BName extends Name {
    void getName() {
        System.out.println ("I'm B");
    }
}

インスタンスの生成は一箇所に集約して、責任を Factory に任せる実装

abstract class Factory {
     abstract Name factoryMethod();
}

public class NameFactory extends Factory {
    abstract Name factoryMethod();
        return new GetName();
    }
}

public abstract class GetName {
    public abstract void manA();
    public abstract void manB();
}

public class Name extends GetName {
    public void manA() {
        System.out.println ("I'm A");
    }
    public void manB() {
        System.out.println ("I'm B");
    }
}

class Sample {
    void hoge() {
        Factory factory = new NameFactory();
        Name name = factory.factoryMethod();

        name.manA(); // I'm A
        name.manB(); // I'm B
    }
}

Factory Method と Abstract Factory の違いを順に理解する | Futurismo