工場出荷時のパターンに戻ります

誰もがよく知っている、それは最も使用されるデザインパターンの一つであることFactoryパターンは非常に一般的であり、Springフレームワーク、工場出荷時のモードは3種類に分かれています:
1、シンプルなファクトリパターン
2、Factory Methodパターン
3、Abstract Factoryパターン

ここ11年の私に聞きます。

エヘン!人類が唯一の物々交換の仕方によって、あなたが望む結果を得るために十分な食料や衣類を維持するためには、まだ原始時代だった昔、。我々は、すべてのものを製造する方法の手ことを知っている、またはそれが餓死します。
コードはで表されます。

public interface Meat {

    String getMeat();

}
public class Beef implements Meat {

    @Override
    public String getMeat() {
        return "牛肉";
    }
}
public class Mutton implements Meat {

    @Override
    public String getMeat() {
        return "羊肉";
    }
}
public class Pork implements Meat {

    @Override
    public String getMeat() {
        return "猪肉";
    }
}
public class SimpleFactoryTest {

    public static void main(String[] args) {

        System.out.println(new Beef.getMeat());
    }
}

私がある、例えば、人々は牛肉がそれ自体を行う必要があります取得したい、私は牛肉を使用してここに来て新たな牛肉が出てきます。このプロセスは非常に面倒ですが、牛肉の生産の全過程を知ることが必要です。

社会の進歩として、小さなワークショップは、あなたがお金を持っている場合、あなたが私の小さな工房以来、肉を購入することができ、判明しました。

シンプルなファクトリパターン

public class Factory {

    public Meat getMilk(String name){

        if("羊肉".equals(name)){
            return new Mutton();
        } else if ("牛肉".equals(name)){
            return new Beef();
        } else if ("猪肉".equals(name)){
            return new Pork();
        } else {
            System.out.println("没有该肉品");
            return null;
        }
    }
}
public class SimpleFactoryTest {

    public static void main(String[] args) {

        Factory factory = new Factory();

        System.out.println(factory.getMeat("牛肉"));
    }
}

私たちは、単純なファクトリパターンを使用した後、あなたは肉の対応するワークショップの種類を買うためにお金限り行くことができることを見ることができ、自分自身をしません。

継続的な社会の進展に伴い、小さなワークショップの欠点をゆっくりと明らかにされています。あなたは生産工場の犬を追加したい場合はまず、開閉の原則への単純なファクトリパターンの逆、それはifelse文の必要な追加の層です。第二に、我々べき同時に小さな工房牛肉、豚肉、羊肉の生産、そして確かにない品質の面で国際基準までで。Factory Methodパターンが出現しました。
Factory Methodパターン

public interface Factory {

    Meat getMeat();
    
}

のは、工場出荷時のインターフェースを持ってみましょう

public class BeafFactory implements Factory {

    @Override
    public Meat getMeat() {
        return new Beef();
    }
}
public class MuttonFactory implements Factory {
    @Override
    public Meat getMeat() {
        return new Mutton();
    }
}
public class PorkFactory implements Factory {
    @Override
    public Meat getMeat() {
        return new Pork();
    }
}
public class MethodFactoryTest {

    public static void main(String[] args) {

        Factory factory = new BeafFactory();

        System.out.println(factory.getMeat());
    }
}

ここではそれに応じてブロイラーブリーダーの生産工場を作成して、それはそれより標準化ではありません。今、ユーザーはそれに牛肉の工場を牛肉にする必要があります。

右の事業拡大に伴い、肉の非常に多様を必要とする場合があり、鶏、アヒル、魚市場...質問は再び、バインドされているFactory Methodパターンは、あまりにも多くの工場の創出につながるならば、この時、ユーザーが購入するために、適切な施設に肉の種類を購入したいとなるように、ユーザーはそれが非常に面倒でしょう。この時間は、より高度なAbstract Factoryパターンが有効になります。

Abstract Factoryパターン

public abstract class AbstractFactory{

    public abstract Meat getBeaf();

    public abstract Meat getPork();

    public abstract Meat getMutton();
}

抽象ファクトリクラスを定義します

public class AbstractFactoryImpl extends AbstractFactory {


    @Override
    public Meat getBeaf() {
        return new BeafFactory().getMeat();
    }

    @Override
    public Meat getPork() {
        return new PorkFactory().getMeat();
    }

    @Override
    public Meat getMutton() {
        return new MuttonFactory().getMeat();
    }
}
public class AbstractFactoryTest {

    public static void main(String[] args) {

        AbstractFactory factory = new AbstractFactoryImpl();

        System.out.println(factory.getBeaf());
    }
}

開閉を満たしながら、これは、より多くのユーザーがそれだけで、このような植物を知っておく必要があり、それを標準化されていない、と私たちはすべての肉の種類を生成することができ、この工場では、ユーザーに見られることができ入れ、ユーザーは、ライン上で取得する必要があります原則的に、あなたはワニの肉を追加したい場合でも、サメ肉我々は内部でのみ、それを追加する必要があります。

概要:三工場のモデルは、私は、単純なファクトリパターンを使用して、あなたは私が最近、スプレッドシートのExcelエクスポート機能を行ったように、実際のプロジェクトで使用する必要がある表情の種類、さらに悪化している1、優れている1言いませんでした。

おすすめ

転載: blog.csdn.net/qq_37014149/article/details/94721095