装飾モード【Deporator Pattern】
8770 ワード
ブログアドレスhttp://blog.csdn.net/ftx2540993425
下の横線以上の内容は他人を参考にして、作者への敬意を表すために、不適切な修正をしないために、私個人のまとめは後にあります.よいもの
Ladies and gentlemen,May I get your attention,Please?,Now I’m going to talk about decorator
pattern.装飾のモードは中国で使うのは本当に多くて、中国の文化は中庸の文化で、話をしてあるいは事をするのはすべてあまり直接的ではありませんて、技巧が必要で、例えば話をしましょう、あなたは一人を批判して、あなたはすぐにあなたのこのしたことが間違っていると言うことができなくて、それは間違っていて、あなたはまず彼の成績を肯定して、長所を褒めて、それから瑕疵を指摘して、间违ったところを指摘して、最后にもう一つ激励して、あなたはこれらの欠点を修正した后にあれらの利益があって、例えばあなたはもっと多くの小兵を连れて、小さい头に着くことができて、さもなくばあなたは来て1回の批判で、あなたは见て、きっと屈服しないで、ぶつかって甚だしきに至っては直接“ここはおじいさんを养わないで、自分でおじいさんを养う所があります”が抜け出します.これは话をして、あれは事をするのもとても多くて、パクリ制品が流行する前に、伪物はとても盛んで、私は2002年に携帯电话を买って、その时ボスが吹いているのは天然痘が乱れて、この携帯电话が最新であることを承诺して、私は见ても、壳は斬新で、包装は新しくて、瑕疵がなくて、正品よりずっと安くて、それから私は买いました.お金が足りなくて、3ヶ月使って、壊れて、修理して、検査して、これは新しい殻の古い機械だと言って、私はめまいがします!古い携帯電話の回線基板を持って、新しいケース、スクリーン、包装を探して新しい携帯電話になって、装飾のモードは人を害するのが浅くありません!私たちは不快なことを言わないで、今日はどんな例を挙げますか.私が小学校に通っている恥ずかしいことを話しましょう.私は小学校の时の学习の成绩はとても悪くて、クラスの上で40余りの学友、私は基本的にすべて45位にランクした后で、先生の私に与えた定义によって“本を読む材料ではありません”で、しかし私の父はとても厳格で、私がこの材料ではないことを知っていて、やはりアヒルの子を追い払って棚に上がって、试験が终わるたびに私はすべてびくびくしています.「竹の子と肉の炒め物」は欠かせないが、少なければ少なめにしなさい.肉は自分のものだ.四年生の期末試験が終わって、学校から損な技が出てきて、成績表を印刷して、保護者にサインして、それから五年生になることができて、私の恐怖ですが、数秒の时間で、何も忘れてしまいました.
まず、この成績表のクラス図を見てみましょう.
受講実績の抽象クラス、次に4年生の受講実績実装クラスがあります.まず抽象クラスを見てください.
勉強好きな人が多すぎる!どうしたんですか.じゃ、この成績表をお父さんに見せますか.はい、クラス図を修正して、成績表をお父さんに見せましょう.
父は成績表を見始めました.この成績表は最も真実で、何も動いたことがありません.原装、Father類を見ています.
尊敬するXXX家长:…国語62数学65体育98自然63.....保護者の署名:
この成績だけでサインしますか?!お父さんはほうきを探し始めました.私のお尻はもう準備ができています.筋肉が張っています.それが痛いのではないでしょうか.ははは、幸いなことに、これは当時の真実ではありません.私は直接成績表をお父さんに渡していません.彼に渡す前に技術の仕事をしました.私は成績表をカプセル化して、カプセル化の分類の2つのステップを歩きます.第一歩:お父さんに各科目の最高点を話して、国語は最高75で、数学は78で、自然は80です.しかし、父は私の成績が最高点数とあまり差がないと感じています.これは実情ですが、何が原因なのか分かりません.どうせ期末試験はあまりよくありませんが、基本的には70点以上に集中しています.私の60点以上は基本的に最下位の役です.第二歩:父が成績表を見た後、私が38位だと彼に言った.クラス全員、これも実情だ.なぜだろうか.10人近くの同級生が退学した.この状況は私は言わない.当時初めて成績表を出したのか、学校はよく考えていなかったのか、全部で何人の同級生がいるのか、何位にランクされているのかなど、どうせ私に穴をあけられたのだ.その修飾は終わりました.クラス図をどのように修正するかを見てみましょう.
これはあなたが最も考えやすいクラス図だと思います.直接サブクラスを増やして、report方法を書き換えることで、この問題を簡単に解決しました.そうではありませんか.はい、確かに、確かに良い方法です.具体的な実現を見てみましょう.
今度の试験の国语の最高は75で、数学は78で、自然は80尊敬するXXXの家长です:......国語62数学65体育98自然63.....保護者の署名:私は38位です...保護者の署名:老三
継承を通じて确かにこの问题を解决することができて、お父さんは成绩表を见てとても楽しくて、それからサインをあげましたが、现実の状况はとても复雑で、お父さんは私の报告を闻いて最高の成绩を报告した后に、直接喜んで花を咲かせて、直接サインして、后のランキングは必要ありません.クラスの拡張を続行しますか?何種類のクラスを拡張できますか?これはまだ簡単なシーンで、装飾が必要な条件が非常に多いです.例えば、20個など、継承することで解決します.あなたが考えているサブクラスはいくつありますか.あなたはもうすぐ崩壊するのではないでしょうか.はい、継承状況を通じて確かに問題が発生しているのを見て、クラスが爆発して、クラスの数が急増して、これらのクラスを書くだけで疲れていないのはおかしいです.そして、今後のメンテナンスを考えなければなりません.誰がこのようなクラスのメンテナンスを受けたいですか.また、オブジェクト向けの設計では、2層を超えて継承されている場合は、設計の問題が発生しているかどうかを考えなければなりません.これは経験値であり、絶対ではありません.継承階層が多ければ多いほど、メンテナンスコストが多くなり、問題が多くなります.どうすればいいですか.これらの問題を解決するために、装飾モードが登場します.まず、クラス図を見てみましょう.
1つの抽象クラスと2つの実装クラスを追加します.ここでDecoratorの役割はSchoolReportクラスをカプセル化し、ソースコードを見ます.
Reportメソッド!まずHighScoreDecorator実装クラスを見てみましょう.
学校の並べ替えにどのように報いるかを見てみましょうSortDecoratorコード:
海扁を避けた.
下の横線以上の内容は他人を参考にして、作者への敬意を表すために、不適切な修正をしないために、私個人のまとめは後にあります.よいもの
Ladies and gentlemen,May I get your attention,Please?,Now I’m going to talk about decorator
pattern.装飾のモードは中国で使うのは本当に多くて、中国の文化は中庸の文化で、話をしてあるいは事をするのはすべてあまり直接的ではありませんて、技巧が必要で、例えば話をしましょう、あなたは一人を批判して、あなたはすぐにあなたのこのしたことが間違っていると言うことができなくて、それは間違っていて、あなたはまず彼の成績を肯定して、長所を褒めて、それから瑕疵を指摘して、间违ったところを指摘して、最后にもう一つ激励して、あなたはこれらの欠点を修正した后にあれらの利益があって、例えばあなたはもっと多くの小兵を连れて、小さい头に着くことができて、さもなくばあなたは来て1回の批判で、あなたは见て、きっと屈服しないで、ぶつかって甚だしきに至っては直接“ここはおじいさんを养わないで、自分でおじいさんを养う所があります”が抜け出します.これは话をして、あれは事をするのもとても多くて、パクリ制品が流行する前に、伪物はとても盛んで、私は2002年に携帯电话を买って、その时ボスが吹いているのは天然痘が乱れて、この携帯电话が最新であることを承诺して、私は见ても、壳は斬新で、包装は新しくて、瑕疵がなくて、正品よりずっと安くて、それから私は买いました.お金が足りなくて、3ヶ月使って、壊れて、修理して、検査して、これは新しい殻の古い機械だと言って、私はめまいがします!古い携帯電話の回線基板を持って、新しいケース、スクリーン、包装を探して新しい携帯電話になって、装飾のモードは人を害するのが浅くありません!私たちは不快なことを言わないで、今日はどんな例を挙げますか.私が小学校に通っている恥ずかしいことを話しましょう.私は小学校の时の学习の成绩はとても悪くて、クラスの上で40余りの学友、私は基本的にすべて45位にランクした后で、先生の私に与えた定义によって“本を読む材料ではありません”で、しかし私の父はとても厳格で、私がこの材料ではないことを知っていて、やはりアヒルの子を追い払って棚に上がって、试験が终わるたびに私はすべてびくびくしています.「竹の子と肉の炒め物」は欠かせないが、少なければ少なめにしなさい.肉は自分のものだ.四年生の期末試験が終わって、学校から損な技が出てきて、成績表を印刷して、保護者にサインして、それから五年生になることができて、私の恐怖ですが、数秒の时間で、何も忘れてしまいました.
まず、この成績表のクラス図を見てみましょう.
受講実績の抽象クラス、次に4年生の受講実績実装クラスがあります.まず抽象クラスを見てください.
package com.cbf4life;
/**
* @author cbf4Life [email protected]
* I'm glad to share my knowledge with you all.
*
*/
public abstract class SchoolReport {
//
public abstract void report();
// ,
public abstract void sign();
}
実装クラスFouthGradSchoolReportを参照してください.package com.cbf4life;
/**
* @author cbf4Life [email protected]
* I'm glad to share my knowledge with you all.
* , ,
* “ ” 。
*/
public class FouthGradeSchoolReport extends SchoolReport {
//
public void report() {
//
System.out.println(" XXX :");
System.out.println(" ......");
System.out.println(" 62 65 98 63");
System.out.println(" .......");
System.out.println(" : ");
}
//
public void sign(String name) {
System.out.println(" :"+name);
}
}
の成績表が出てきて、62、65などの成績を見ないでください.小学校で90点を下回っているのは基本的に中下等です.ああ、勉強好きな人が多すぎる!どうしたんですか.じゃ、この成績表をお父さんに見せますか.はい、クラス図を修正して、成績表をお父さんに見せましょう.
父は成績表を見始めました.この成績表は最も真実で、何も動いたことがありません.原装、Father類を見ています.
package com.cbf4life;
/**
* @author cbf4Life [email protected]
* I'm glad to share my knowledge with you all.
*
*/
public class Father {
public static void main(String[] args) {
//
SchoolReport sr = new FouthGradeSchoolReport();
//
sr.report();
// ? !
}
}
の実行結果は次のとおりです.尊敬するXXX家长:…国語62数学65体育98自然63.....保護者の署名:
この成績だけでサインしますか?!お父さんはほうきを探し始めました.私のお尻はもう準備ができています.筋肉が張っています.それが痛いのではないでしょうか.ははは、幸いなことに、これは当時の真実ではありません.私は直接成績表をお父さんに渡していません.彼に渡す前に技術の仕事をしました.私は成績表をカプセル化して、カプセル化の分類の2つのステップを歩きます.第一歩:お父さんに各科目の最高点を話して、国語は最高75で、数学は78で、自然は80です.しかし、父は私の成績が最高点数とあまり差がないと感じています.これは実情ですが、何が原因なのか分かりません.どうせ期末試験はあまりよくありませんが、基本的には70点以上に集中しています.私の60点以上は基本的に最下位の役です.第二歩:父が成績表を見た後、私が38位だと彼に言った.クラス全員、これも実情だ.なぜだろうか.10人近くの同級生が退学した.この状況は私は言わない.当時初めて成績表を出したのか、学校はよく考えていなかったのか、全部で何人の同級生がいるのか、何位にランクされているのかなど、どうせ私に穴をあけられたのだ.その修飾は終わりました.クラス図をどのように修正するかを見てみましょう.
これはあなたが最も考えやすいクラス図だと思います.直接サブクラスを増やして、report方法を書き換えることで、この問題を簡単に解決しました.そうではありませんか.はい、確かに、確かに良い方法です.具体的な実現を見てみましょう.
package com.cbf4life;
/**
* @author cbf4Life [email protected]
* I'm glad to share my knowledge with you all.
*
* Sugar , ,
*
*/
public class SugarFouthGradeSchoolReport extends FouthGradeSchoolReport {
// ,
private void reportHighScore(){
System.out.println(" 75, 78, 80");
}
// ,
private void reportSort(){
System.out.println(" 38 ...");
}
// ,
@Override
this.reportHighScore(); //
super.report(); //
this.reportSort(); //
}
}
public void report(){
this.reportHighScore(); //
super.report(); //
this.reportSort(); //
}
}
それからFather類は少し修正して美化後の成績表を見ることができて、コードを見て以下の通りです:package com.cbf4life;
/**
* @author cbf4Life [email protected]
* I'm glad to share my knowledge with you all.
*
*/
public class Father {
public static void main(String[] args) {
//
SchoolReport sr= new SugarFouthGradeSchoolReport();
//
sr.report();
// , , ,
sr.sign(" "); // ,
}
}
の実行結果は次のとおりです.今度の试験の国语の最高は75で、数学は78で、自然は80尊敬するXXXの家长です:......国語62数学65体育98自然63.....保護者の署名:私は38位です...保護者の署名:老三
継承を通じて确かにこの问题を解决することができて、お父さんは成绩表を见てとても楽しくて、それからサインをあげましたが、现実の状况はとても复雑で、お父さんは私の报告を闻いて最高の成绩を报告した后に、直接喜んで花を咲かせて、直接サインして、后のランキングは必要ありません.クラスの拡張を続行しますか?何種類のクラスを拡張できますか?これはまだ簡単なシーンで、装飾が必要な条件が非常に多いです.例えば、20個など、継承することで解決します.あなたが考えているサブクラスはいくつありますか.あなたはもうすぐ崩壊するのではないでしょうか.はい、継承状況を通じて確かに問題が発生しているのを見て、クラスが爆発して、クラスの数が急増して、これらのクラスを書くだけで疲れていないのはおかしいです.そして、今後のメンテナンスを考えなければなりません.誰がこのようなクラスのメンテナンスを受けたいですか.また、オブジェクト向けの設計では、2層を超えて継承されている場合は、設計の問題が発生しているかどうかを考えなければなりません.これは経験値であり、絶対ではありません.継承階層が多ければ多いほど、メンテナンスコストが多くなり、問題が多くなります.どうすればいいですか.これらの問題を解決するために、装飾モードが登場します.まず、クラス図を見てみましょう.
1つの抽象クラスと2つの実装クラスを追加します.ここでDecoratorの役割はSchoolReportクラスをカプセル化し、ソースコードを見ます.
package com.cbf4life;
/**
* @author cbf4Life [email protected]
* I'm glad to share my knowledge with you all.
* ,
*/
public abstract class Decorator extends SchoolReport{
//
private SchoolReport sr;
// ,
public Decorator(SchoolReport sr){
this.sr = sr;
}
//
public void report(){
this.sr.report();
}
//
public void sign(String name){
this.sr.sign(name);
}
}
Decorator抽象クラスの目的は簡単です.サブクラスにSchoolReportのサブクラスをカプセル化させることです.どうやってカプセル化しますか.書き換えるReportメソッド!まずHighScoreDecorator実装クラスを見てみましょう.
package com.cbf4life;
/**
* @author cbf4Life [email protected]
* I'm glad to share my knowledge with you all.
*
*/
public class HighScoreDecorator extends Decorator {
//
public HighScoreDecorator(SchoolReport sr){
super(sr);
}
//
private void reportHighScore(){
System.out.println(" 75, 78, 80");
}
// , , ,
@Override
public void report(){
this.reportHighScore();
super.report();
}
}
reportメソッドを書き換え、特定の装飾クラスの装飾メソッドreportHighScoreを呼び出してから、特定のコンポーネントのメソッドを呼び出し、学校の並べ替えにどのように報いるかを見てみましょうSortDecoratorコード:
package com.cbf4life;
/**
* @author cbf4Life [email protected]
* I'm glad to share my knowledge with you all.
*
*/
public class SortDecorator extends Decorator {
//
public SortDecorator(SchoolReport sr){
super(sr);
}
//
private void reportSort(){
System.out.println(" 38 ...");
}
// ,
@Override
public void report(){
super.report();
this.reportSort();
}
}
それから父が成績表をどう見ているか見てみましょう.package com.cbf4life;
/**
* @author cbf4Life [email protected]
* I'm glad to share my knowledge with you all.
*
*/
public class Father {
public static void main(String[] args) {
//
SchoolReport sr;
sr = new FouthGradeSchoolReport(); //
//
sr = new HighScoreDecorator(sr);
//
sr = new SortDecorator(sr);
//
sr.report();
// , , ,
sr.sign(" "); // ,
}
}
お父さんは成績表を見ると、私の話を聞いて、とても楽しかったです.息子は進歩していますね.40人以上から30人以上に進歩して、進歩が大きいです.海扁を避けた.