[Design pattern] Abstract Factory Methods 🖇, (Creational patterns)


Overview


Abstract Factory Pattern 🖇
   関連するサブクラスを特定のグループに組み合わせ,一次置換可能な設計モード分解法の拡張と見なすことができる.

Class Diagram



Example Code 📃

package abstractfactory;

public interface MachineA {
	public void process();
}
package abstractfactory;

public class MachineA1 implements MachineA{

	@Override
	public void process() {
		System.out.println("excute MachineA1");
	}
}
package abstractfactory;

public class MachineA2 implements MachineA{

	@Override
	public void process() {
		System.out.println("excute MachineA2");
	}
}
package abstractfactory;

public interface MachineB {
	public void process();
}
package abstractfactory;

public class MachineB1 implements MachineB{

	@Override
	public void process() {
		System.out.println("excute MachineB1");
	}
}
package abstractfactory;

public class MachineB2 implements MachineB{

	@Override
	public void process() {
		System.out.println("excute MachineB1");
	}
}
package abstractfactory;

public interface MachineFactory {
	public MachineA getMachineA();
	public MachineB getMachineB();
}
package abstractfactory;

public class MachineFactoryA implements MachineFactory{

	@Override
	public MachineA getMachineA() {
		return new MachineA1();
	}

	@Override
	public MachineB getMachineB() {
		return new MachineB1();
	}
}
package abstractfactory;

public class MachineFactoryB implements MachineFactory{

	@Override
	public MachineA getMachineA() {
		return new MachineA2();
	}

	@Override
	public MachineB getMachineB() {
		return new MachineB2();
	}
}

Main Program 📑

package abstractfactory;

public class FactoryMain {

	public static void main(String[] args) {
		MachineFactory machineFactoryA = new MachineFactoryA();
		machineFactoryA.getMachineA().process();
		machineFactoryA.getMachineB().process();

		MachineFactory machineFactoryB = new MachineFactoryB();
		machineFactoryB.getMachineA().process();
		machineFactoryB.getMachineB().process();
	}
}
excute MachineA1
excute MachineB1
excute MachineA2
excute MachineB1
動作がいいですね.

Closing Remarks 🚩


Abstract Factory Pattern
   同じ処理ロジックのサブクラスをマージすることで、オブジェクトを選択的に作成できます.ただし、新しいオブジェクトを追加した場合は、サブクラスを同時に追加する必要があり、拡張時にすべてのサブクラスを変更する必要がある場合があります.
Factory method
   1つのサブクラスにおけるパラメータを選択的に処理して生成することで,多形成の欠点を解決できる.
ただし、新しいオブジェクトを追加する場合は条件を追加する必要があり、拡張時にサブクラスの規模が大きくなるため、メンテナンスが困難になります.