Java実践の道(設計モデル)——工場モデル(抽象工場)


前回の回顧:会社が拡大すると同時に、募集した従業員はプログラマーだけではありません.販売員を募集する必要があり、従来の構造に大きな衝撃を与えた.以前のモデルはもう適用されていません.次に抽象工場モデルを使用してこの問題を解決します.
実装:さらに抽象化します.プログラマーであれセールスマンであれ、社員であれ、会社の求人にとって、社員は最高の抽象レベルに達することができます.
従業員インタフェース
public interface Employee {
	void work();
}

プログラマインタフェース
public interface Programmer extends Employee {
}

JAvaプログラマー
public class JavaProgrammer implements Programmer{
	public void work() {
		System.out.println("I am develop java softeware");
	}
}

csharpプログラマー
public class CsharpProgrammer implements Programmer {
	public void work() {
		System.out.println("I am develop csharp softeware");
	}
}

phpプログラマー
public class PhpProgrammer implements Programmer {

	public void work() {
		System.out.println("I am develop php softeware");
	}

}

rubyプログラマー
public class RubyProgrammer implements Programmer {

	public void work() {
		System.out.println("I am develop ruby softeware");
	}

}

セールスマンインタフェース
public interface Seller extends Employee {
}

JAvaセールスマン
public class JavaSeller implements Seller {

	public void work() {
		System.out.println("I am selling java software");
	}

}

csharp販売員
public class CsharpSeller implements Seller {

	public void work() {
		System.out.println("I am selling csharp software");
	}

}

会社の機能
public interface AbstractFactory {
	Employee getEmployee();
}

JAva開発部門
public class JavaFactory implements AbstractFactory {

	public Employee getEmployee() {
		return new JavaProgrammer();
	}

}
csharp開発部門
public class CsharpFactory implements AbstractFactory {

	public Employee getEmployee() {
		return new CsharpProgrammer();
	}

}

php開発部門
public class PhpFactory implements AbstractFactory {

	public Employee getEmployee() {
		return new PhpProgrammer();
	}

}

Ruby開発部門
public class RubyFactory implements AbstractFactory {

	public Employee getEmployee() {
		return newRubyProgrammer();
	}

}

JAva販売部門
public class JavaSellerFactory implements AbstractFactory {

	public Employee getEmployee() {
		return new JavaSeller();
	}

}

csharp販売部門
public class CsharpSellerFactory implements AbstractFactory {

	public Employee getEmployee() {
		return new CsharpSeller();
	}

}

作成しましたjavaセールスマンが必要です
public static void main(String[] args) {
		System.out.println("I want a java seller");
		AbstractFactory factory=new JavaSellerFactory();
		Employee seller=factory.getEmployee();
		seller.work();
	}

完璧に働いています・・・
次は清掃員を探さなければなりません
public class Cleaner implements Employee {

	public void work() {
		System.out.println("I am cleaning......");
	}

}

クリーニング部門の作成
public class CleanFactory implements AbstractFactory {

	public Employee getEmployee() {
		return new Cleaner();
	}

}

清掃員が働き始める
public static void main(String[] args) {
		System.out.println("I want a cleaner");
		AbstractFactory factory=new CleanFactory();
		Employee seller=factory.getEmployee();
		seller.work();
	}

元のコードは何の変更も必要なく、対応する従業員と部門を増やすだけでいいです.
総括:工場モデルは3種類に分けられる:簡単な工場、工場方法と抽象的な工場.使用時には、まず工場生産のカテゴリが一意であるかどうかを決定し、前の2つを考慮できる場合は、3つ目を使用する必要がない場合は考慮します.工場法は単純工場よりも開放的であり,OOの開閉原則に合致するが,具体的に使用する場合,生産の対象が確定すれば単純工場の使用が考えられる.
(*文中の例は問題を説明するためだけであり、不適切な点があればご了承ください)