シンプルなファクトリーパターン
自動車を例に、単純なファクトリ パターンを実装します
。 車のインターフェイスを定義します。ファクトリ パターンはオブジェクトの作成にのみ関連するため、特定のメソッドを定義する必要はありません。
package com.xzy.simpleFactory;
public interface ICar {
//定义小汽车接口
}
package com.xzy.simpleFactory;
public class UpCar implements ICar {
//高档汽车的实现
}
package com.xzy.simpleFactory;
public class MidCar implements ICar {
//中档汽车的实现
}
package com.xzy.simpleFactory;
public class DownCar implements ICar {
//低档汽车的具体实现
}
3種類のクルマをつくるクルマづくり工場
package com.xzy.simpleFactory;
public class CarSimpleFactory {
public static final String UPTYPE = "uptype";
public static final String MIDTYPE = "midtype";
public static final String DOWNTYPE = "downtype";
public static ICar create(String type) {
ICar obj = null;
if (type.equals(UPTYPE)) {
//创建高档汽车
obj = new UpCar();
}else if(type.equals(MIDTYPE)){
//创建中等汽车
obj = new MidCar();
}else if(type.equals(DOWNTYPE)){
//创建低档汽车
obj = new DownCar();
}
//返回创建好的对象
return obj;
}
}
テスト用のテストクラスを作成する
package com.xzy.simpleFactory;
import org.junit.Test;
public class SimpleFactoryTest {
@Test
public void test(){
//传入需要创建的对象类型
ICar car = CarSimpleFactory.create(CarSimpleFactory.MIDTYPE);
System.out.println(car.getClass());
}
}
実行結果が表示されなくなりました。
シンプルファクトリーの特徴
- 彼は具象クラスであり、インターフェイスや抽象クラスではありません。
- 新しいタイプのハイエンド カーを追加したい場合は、ハイエンド カーの実装を記述し、ファクトリ クラスの create メソッドを変更する必要があります。
工場パターン
自動車インターフェースの定義と 3 台の自動車の実現は、単純な工場の定義と同じです。
抽象ファクトリーを定義する
package com.xzy.Factory;
public abstract class AbstractFactory {
//定义抽象工厂,具有子工场的共同特性
public abstract ICar create();
}
特定のサブファクトリーを定義する
package com.xzy.Factory;
public class UpFactory extends AbstractFactory {
@Override
public ICar create() {
return new UpCar();
}
}
*****************************************
package com.xzy.Factory;
public class MidFactory extends AbstractFactory {
@Override
public ICar create() {
return new MidCar();
}
}
******************************************
package com.xzy.Factory;
public class DownCarFactory extends AbstractFactory {
@Override
public ICar create() {
return new DownCar();
}
}
テストクラスを書く
package com.xzy.Factory;
import org.junit.Test;
public class AbstractFactoryTest {
@Test
public void test(){
AbstractFactory obj = new UpFactory();
ICar car = obj.create();
System.out.println(car.getClass());
}
}
演算結果
class com.xzy.Factory.UpCar
Process finished with exit code 0
抽象的な工場
- 一般に、ファクトリ モードでは、単純ファクトリは単一製品システムですが、抽象ファクトリは複数製品システムです。
- 本質的に、抽象ファクトリーとファクトリーパターンは統一されています。