抽象的なパターン
10093 ワード
関連クラスまたは依存オブジェクトのファミリーを作成するためのインターフェイスを提供します.
AbstractFactory:抽象的な製品を作成する操作のインターフェイスを宣言します. 具体的には、具体的な製品オブジェクトを作成する操作を実装します. AbstractProduct :製品オブジェクトの型のインターフェイスを宣言します. 製品:対応する具体的な工場が作成する製品オブジェクトを定義します.抽象化インターフェイスを実装します. クライアント:AttributFactoryとAbstractProductsクラスで宣言されたインターフェイスを使用します. コード
参加者
コード
public class Main {
public static void main(String[] args) {
// Abstract factory #1
AbstractFactory factory1 = new ConcreteFactory1();
Client client1 = new Client(factory1);
client1.run();
// Abstract factory #2
AbstractFactory factory2 = new ConcreteFactory2();
Client client2 = new Client(factory2);
client2.run();
}
}
public interface AbstractFactory {
AbstractProductA createProductA();
AbstractProductB createProductB();
}
public class ConcreteFactory1 implements AbstractFactory {
@Override
public AbstractProductA createProductA() {
return new ProductA1();
}
@Override
public AbstractProductB createProductB() {
return new ProductB1();
}
}
public class ConcreteFactory2 implements AbstractFactory {
@Override
public AbstractProductA createProductA() {
return new ProductA2();
}
@Override
public AbstractProductB createProductB() {
return new ProductB2();
}
}
public interface AbstractProductA {
}
public interface AbstractProductB {
void interact(AbstractProductA a);
}
public class ProductA1 implements AbstractProductA {
}
public class ProductB1 implements AbstractProductB {
@Override
public void interact(AbstractProductA a) {
System.out.println(this.getClass().getSimpleName() + " interacts with " + a.getClass().getSimpleName());
}
}
public class ProductA2 implements AbstractProductA {
}
public class ProductB2 implements AbstractProductB {
@Override
public void interact(AbstractProductA a) {
System.out.println(this.getClass().getSimpleName() + " interacts with " + a.getClass().getSimpleName());
}
}
public class Client {
private AbstractProductA abstractProductA;
private AbstractProductB abstractProductB;
public Client(AbstractFactory factory) {
abstractProductB = factory.createProductB();
abstractProductA = factory.createProductA();
}
public void run() {
abstractProductB.interact(abstractProductA);
}
}
出力
ProductB1 interacts with ProductA1
ProductB2 interacts with ProductA2
エディエルジュリアン61
/
デザインパターン
メインデザインパターン
アイドル・ Sep 27・ 1分読む
#designpatterns
#creational
#structural
#behavioral
Reference
この問題について(抽象的なパターン), 我々は、より多くの情報をここで見つけました
https://dev.to/eidher/abstract-factory-3opg
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
public class Main {
public static void main(String[] args) {
// Abstract factory #1
AbstractFactory factory1 = new ConcreteFactory1();
Client client1 = new Client(factory1);
client1.run();
// Abstract factory #2
AbstractFactory factory2 = new ConcreteFactory2();
Client client2 = new Client(factory2);
client2.run();
}
}
public interface AbstractFactory {
AbstractProductA createProductA();
AbstractProductB createProductB();
}
public class ConcreteFactory1 implements AbstractFactory {
@Override
public AbstractProductA createProductA() {
return new ProductA1();
}
@Override
public AbstractProductB createProductB() {
return new ProductB1();
}
}
public class ConcreteFactory2 implements AbstractFactory {
@Override
public AbstractProductA createProductA() {
return new ProductA2();
}
@Override
public AbstractProductB createProductB() {
return new ProductB2();
}
}
public interface AbstractProductA {
}
public interface AbstractProductB {
void interact(AbstractProductA a);
}
public class ProductA1 implements AbstractProductA {
}
public class ProductB1 implements AbstractProductB {
@Override
public void interact(AbstractProductA a) {
System.out.println(this.getClass().getSimpleName() + " interacts with " + a.getClass().getSimpleName());
}
}
public class ProductA2 implements AbstractProductA {
}
public class ProductB2 implements AbstractProductB {
@Override
public void interact(AbstractProductA a) {
System.out.println(this.getClass().getSimpleName() + " interacts with " + a.getClass().getSimpleName());
}
}
public class Client {
private AbstractProductA abstractProductA;
private AbstractProductB abstractProductB;
public Client(AbstractFactory factory) {
abstractProductB = factory.createProductB();
abstractProductA = factory.createProductA();
}
public void run() {
abstractProductB.interact(abstractProductA);
}
}
ProductB1 interacts with ProductA1
ProductB2 interacts with ProductA2
エディエルジュリアン61 / デザインパターン
メインデザインパターン
アイドル・ Sep 27・ 1分読む
#designpatterns
#creational
#structural
#behavioral
Reference
この問題について(抽象的なパターン), 我々は、より多くの情報をここで見つけました https://dev.to/eidher/abstract-factory-3opgテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol