[Design pattern] Abstract Factory Methods 🖇, (Creational patterns)
13931 ワード
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つのサブクラスにおけるパラメータを選択的に処理して生成することで,多形成の欠点を解決できる.
ただし、新しいオブジェクトを追加する場合は条件を追加する必要があり、拡張時にサブクラスの規模が大きくなるため、メンテナンスが困難になります.
Reference
この問題について([Design pattern] Abstract Factory Methods 🖇, (Creational patterns)), 我々は、より多くの情報をここで見つけました https://velog.io/@daydream/Design-pattern-Abstract-Factory-Patternテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol