Java実践の道(設計モデル)——工場モデル(単純工場)
1、概要:工場モードでは一般的に3つの方式に分けられる.作成したカテゴリに基づいて、私はこのように分類します.(1)オブジェクトの単純なファクトリメソッドとファクトリメソッドを作成する,(2)複数のカテゴリの抽象ファクトリを作成する.
2、作用:コードの再利用性と拡張性を増加し、例えば異なるデータベースの実現に対して簡単な工場モードを使用してデータベースの分離(デカップリング)を達成することができ、このようにデータベースを交換する時、直面する修正代価は低減する.
3、対比:3つの方式の抽象レベルは簡単な工場->工場方法->抽象工場から順次増加し、抽象レベルが高いほど拡張性が良い.もちろん抽象的であればあるほどよいというわけではないが,抽象的であればあるほど理解しにくくなり,コードが相対的に複雑になるため,実際の状況に応じて使用する具体的なパターンを特定しなければならない.
4、実現:シーンによって、まず簡単な工場モードを実現する
シーン:今、私は会社(工場)を開いてソフトウェアを開発するつもりです.javaとcsharp言語を知っている人を募集するつもりです.私の現在の業務はこの2つのプログラマーしか必要ありません.そこで、私の会社は運営を始めました.
工場類は以下の通り
Javaプログラムのソフトウェアを開発する必要があります.テストは以下の通りです.
私の予想通り、このjavaプログラムはjavaプログラマーが熱く進行中で、間もなく終わると信じて、自信満々です.
数日後にまたC#のプログラムがあって、そこで私は
へへへ、全然大丈夫です.次の一ヶ月はjavaとC#についての注文が続々と来て、各プログラムは忙しくて、私自身も疲れ果てています.
突然ある日、ある取引先が私にビジネスについてphpでやる必要があると言ってくれました.私の会社のすべての従業員は以前javaとC#をしていましたが、彼には関係ありません.次に、どうせ工期が長いです.
会社に帰って従業員に聞いて、今phpのプログラムを受け取って誰がするか聞いてみました.彼らは今手元にあるプロジェクトがいくつかあると言っていますが、phpには詳しくありません.勉強にも時間がかかりますね(プログラムに反応すると、単純工場モードが変化に直面したときに元のコードを修正する必要があり、これは大きなプロジェクトにとって災難的である).考えてみれば、これでは私を倒すことができない.当初phpをやっていなかったことを後悔しているが、考えてみれば間違っている.開発言語がそんなに多いので、言語を開発しているすべての人を一度に募集することはできないだろう.(プログラムはすべての状況を予知することができなくて、簡単な工場は弊害を探して、開放性の原則はよくありません).
そこで私は再び計画して、来期の工場の方法が問題を解決することを期待します
2、作用:コードの再利用性と拡張性を増加し、例えば異なるデータベースの実現に対して簡単な工場モードを使用してデータベースの分離(デカップリング)を達成することができ、このようにデータベースを交換する時、直面する修正代価は低減する.
3、対比:3つの方式の抽象レベルは簡単な工場->工場方法->抽象工場から順次増加し、抽象レベルが高いほど拡張性が良い.もちろん抽象的であればあるほどよいというわけではないが,抽象的であればあるほど理解しにくくなり,コードが相対的に複雑になるため,実際の状況に応じて使用する具体的なパターンを特定しなければならない.
4、実現:シーンによって、まず簡単な工場モードを実現する
シーン:今、私は会社(工場)を開いてソフトウェアを開発するつもりです.javaとcsharp言語を知っている人を募集するつもりです.私の現在の業務はこの2つのプログラマーしか必要ありません.そこで、私の会社は運営を始めました.
public interface Programmer {
void develop();
}
public class JavaProgrammer implements Programmer{
public void develop() {
System.out.println("I am develop java softeware");
}
}
public class CsharpProgrammer implements Programmer {
public void develop() {
System.out.println("I am develop csharp softeware");
}
}
工場類は以下の通り
public class SimpleFactory {
public static Programmer createProgrammer(String type)
{
if(type.equals("java"))
return new JavaProgrammer();
if(type.equals("csharp"))
return new CsharpProgrammer();
return null;
}
}
Javaプログラムのソフトウェアを開発する必要があります.テストは以下の通りです.
public static void main(String[] args) {
System.out.println("I want a java programmer");
Programmer p=SimpleFactory.createProgrammer("java");
p.develop();
}
私の予想通り、このjavaプログラムはjavaプログラマーが熱く進行中で、間もなく終わると信じて、自信満々です.
数日後にまたC#のプログラムがあって、そこで私は
public static void main(String[] args) {
System.out.println("I want a csharp programmer");
Programmer p=SimpleFactory.createProgrammer("csharp");
p.develop();
}
へへへ、全然大丈夫です.次の一ヶ月はjavaとC#についての注文が続々と来て、各プログラムは忙しくて、私自身も疲れ果てています.
突然ある日、ある取引先が私にビジネスについてphpでやる必要があると言ってくれました.私の会社のすべての従業員は以前javaとC#をしていましたが、彼には関係ありません.次に、どうせ工期が長いです.
会社に帰って従業員に聞いて、今phpのプログラムを受け取って誰がするか聞いてみました.彼らは今手元にあるプロジェクトがいくつかあると言っていますが、phpには詳しくありません.勉強にも時間がかかりますね(プログラムに反応すると、単純工場モードが変化に直面したときに元のコードを修正する必要があり、これは大きなプロジェクトにとって災難的である).考えてみれば、これでは私を倒すことができない.当初phpをやっていなかったことを後悔しているが、考えてみれば間違っている.開発言語がそんなに多いので、言語を開発しているすべての人を一度に募集することはできないだろう.(プログラムはすべての状況を予知することができなくて、簡単な工場は弊害を探して、開放性の原則はよくありません).
そこで私は再び計画して、来期の工場の方法が問題を解決することを期待します