この記事では、デコレーターパターンに基づいてJavaによって実装された染められた蒸しパンのケースについて説明します。次のように、参照のために共有してください。
1。パターン定義
デコレーターパターンは、元のファイルを変更して継承を使用せずにオブジェクト関数を動的に拡張します。ラッピングオブジェクト、つまり装飾を作成することにより、実際のオブジェクトをラップします。
装飾的なオブジェクトと実際のオブジェクトは同じインターフェイスを持っているため、クライアントオブジェクトは実際のオブジェクトと同じ方法で装飾的なオブジェクトと対話できます。
装飾的なオブジェクトには、実際のオブジェクトへの参照が含まれています。
2。モデルの例
1。パターン分析
このモデルを説明するために、染色パンを作るために、心のこもったベンダーのケースを使用します。
2。デコレーターモード静的クラス図
3。コードの例
3.1蒸しパンインターフェイスを作成-Ibread
パッケージcom.demo.abs;/** *蒸しパン処理インターフェイス * * @author * */public interface ibread {//材料public void prepair(); //ハーモニーpublic void neeflour(); //蒸しバンズpublic void steamed(); / ***蒸しパンの処理*/ public void Process();}3.2通常のパンの実装-NormalBread
パッケージcom.demo.abs;/** *通常の蒸しパンの実装 * * @author * * */public class normalbread emplements ibread {//材料を準備するpublic void prepair(){system.out.println( "小麦粉、水、ベーキングパウダー... } // hemian public void neeflour(){system.out.println( "hmian ..."); } //蒸しバンズpublic void steamed(){system.out.println( "蒸しパン...香りの良い蒸しパンはオーブンから出ています!"); } / ***蒸しパンの処理* / public void process(){//材料prepair()を準備する; // kneadflour(); //蒸し蒸し(); }}3.3抽象デコレーターを作成-AbstractBread
パッケージcom.demo.decorator; import com.demo.abs.ibread;/** * abstract Decorator * * @author * */public Abstract class Abstract Bread Implements {// Ibread Object Private Private Ibread Bread; Public AbstractBread(Ibread Bread){this.bread = Bread; } //材料public void prepare(){this.bread.prepair(); } //穏やかにpublic public void neeflour(){this.bread.kneadflour(); } //蒸しバンズpublic void steamed(){this.bread.steamed(); } //蒸しパンの処理public void process(){prepair(); kneeflour();蒸し(); }}3.4染料デコレータ - コーンデコレーターを作成します
パッケージcom.demo.decorator; import com.demo.abs.ibread;/** * dyeed corn buns * * @author * * */public class corndecoratorは抽象的ブレッドを拡張します{//構築方法public corndecorator(ibread Bread){super(Bread); } //ブラックハートベンダーがpublic void paint(){system.out.println( "レモン黄色の色素を追加..."); } //親クラスの生地メソッド@Override public void neeflour(){// this.paint()は、小麦粉に染料を加えた後に開始されます。 // super.kneadflour(); }}3.5 Scalypseデコレーターを作成 - SweetDecorator
パッケージcom.demo.decorator; import com.demo.abs.ibread;/** * cyperus蒸しbun * * @author * * */public class sweetdecorator {// construct method public sweetdecorator(ibread Bread){super(Bread); } // black Hearte Vendors Cyperus public void paint(){system.out.println( "add cyperus ..."); } //親クラスの生地方法にオーバーロード@Override public void neeflour(){//小麦粉にCyperusを追加した後、Dough this.Paint()を起動します。 // hemma super.kneadflour(); }}3.6スイートコーン蒸しパンの生産 - クライアント
パッケージcom.demo; import com.demo.abs.ibread; Import com.demo.abs.normalbread; Import com.demo.decorator.corndecorator; import com.demo.decorator.sweetdecorator; //装飾的な蒸しパンの生産system.out.println( "/n ======装飾的な蒸しパンを開始!!!"); //通常の通常の蒸しパンインスタンスを作成する//これは、包む(飾る)ibread normorbread = new normorbread()に必要なオブジェクトインスタンスです。 //通常の蒸しパンの飾りを始めましょう! ! ! //サッカリンを使用して、蒸したパンを飾りますnormalbread = new SweetDecorator(NormalBread); //レモン黄色の色素を使用して、蒸したパンを飾りますnormalbread = new corndecorator(normalbread); //蒸しパン情報の生産normalbread.process(); System.out.println( "=====蒸しパンの端を飾ります!!!"); }}
4。操作結果
====蒸しパンの装飾を開始します! ! !
小麦粉、水、ベーキングパウダーを準備してください...
レモンイエローカラー剤を追加...
シアニンを追加...
グリース...
蒸したパン...香りの良い蒸しパンはオーブンから出ています!
====装飾的な蒸しパンの終わり! ! !
3。このモデルの設計原則
1閉じた変更部品
2「開閉」原則
3要約指向プログラミング
4.継承よりも組み合わせを好む
4.機会を使用します
1.既存のオブジェクトに動的に新しい機能または責任を追加する必要がある場合は、デコレーターパターンの使用を検討できます。
2.オブジェクトの責任がしばしば変更されるか、責任を動的に増やす必要がある場合、この方法によりサブクラスが速すぎて制御が困難になるため、このような変更に適応するために継承されたサブクラス拡張を追加しないようにします。この時点で、デコレーターモードを使用できます。
5。デコレーターモード静的クラス図
Javaアルゴリズムの詳細については、このサイトに興味のある読者は、「Javaデータ構造とアルゴリズムのチュートリアル」、「Java操作DOMノードのヒントの要約」、「Javaファイルの要約およびディレクトリ操作のヒント」、「Java Cache操作のヒントの要約」というトピックを見ることができます。
この記事がみんなのJavaプログラミングに役立つことを願っています。