Java実践の道(設計モデル)——工場モデル(抽象工場)
前回の回顧:会社が拡大すると同時に、募集した従業員はプログラマーだけではありません.販売員を募集する必要があり、従来の構造に大きな衝撃を与えた.以前のモデルはもう適用されていません.次に抽象工場モデルを使用してこの問題を解決します.
実装:さらに抽象化します.プログラマーであれセールスマンであれ、社員であれ、会社の求人にとって、社員は最高の抽象レベルに達することができます.
従業員インタフェース
プログラマインタフェース
JAvaプログラマー
csharpプログラマー
phpプログラマー
rubyプログラマー
セールスマンインタフェース
JAvaセールスマン
csharp販売員
会社の機能
JAva開発部門
php開発部門
Ruby開発部門
JAva販売部門
csharp販売部門
作成しましたjavaセールスマンが必要です
完璧に働いています・・・
次は清掃員を探さなければなりません
クリーニング部門の作成
清掃員が働き始める
元のコードは何の変更も必要なく、対応する従業員と部門を増やすだけでいいです.
総括:工場モデルは3種類に分けられる:簡単な工場、工場方法と抽象的な工場.使用時には、まず工場生産のカテゴリが一意であるかどうかを決定し、前の2つを考慮できる場合は、3つ目を使用する必要がない場合は考慮します.工場法は単純工場よりも開放的であり,OOの開閉原則に合致するが,具体的に使用する場合,生産の対象が確定すれば単純工場の使用が考えられる.
(*文中の例は問題を説明するためだけであり、不適切な点があればご了承ください)
実装:さらに抽象化します.プログラマーであれセールスマンであれ、社員であれ、会社の求人にとって、社員は最高の抽象レベルに達することができます.
従業員インタフェース
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の開閉原則に合致するが,具体的に使用する場合,生産の対象が確定すれば単純工場の使用が考えられる.
(*文中の例は問題を説明するためだけであり、不適切な点があればご了承ください)