[デザインモード]Decorator Pattern,装飾モード
4058 ワード
背景(Why)
図書館のニュースをユーザーに伝えるプログラムがあります.
最初の要求事項のうち、1つだけが電子メールです.
さらに、伝え方にFacebook、Slackが追加されました.
サブクラスとして、追加の要件が反映されます.
これにより、1人のユーザが複数のNotifierを持つことができるようになる.
すべての組み合わせはサブクラスに置かれています...複雑すぎて、1つのクラスには多くの責任があって、SRPに背いています!どのように改善しますか?
How 상속
で追加の要件を解決しようとした結果、このような問題が発生した.継承には次の問題があります.
상속
で追加の要件を解決しようとした結果、このような問題が発生した.継承には次の問題があります.Composition
またはAggregation
に解決します!// 전체 생성
Person person = new Person();
// 전체 생성자 내
Person() { heart = new Heart(); }
Heart heart = new Heart();
Person person = new Person(heart);
実装に使用することを考えてみましょう.What
上記のDecorator Pattern.
特定の状況と用途に応じて、オブジェクトに責任を追加するモード.
いつ使いますか。(When)
実行時に
ビジネスロジックを階層化して、実行時に複数の組合せのロジックを構成できます.
finalキーワードなどの
Pros
Con
一度ではWrappedを消すのは容易ではありません!
実際の使用例
Java I/Oで使用します.
Gzippedファイルにシーケンス化されたJavaオブジェクトがあり、迅速な読み取りが必要であるとします.
FileInputStream fis = new FileInputStream("/objects.gz");
バッファを使用してBufferedInputStream bis = new BufferedInputStream(fis);
GzipInputStream gis = new GzipInputStream(bis);
ObjectInputStream ois = new ObjectInputStream(gis);
このような次から次へと責任を負って、以下のように使います!SomeObject someObject = (SomeObject) ois.readObject();
状況に応じて自由にstreamを飾ることが確認できます!ref
https://refactoring.guru/design-patterns/decorator
https://www.google.com/url?sa=i&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FDecorator_pattern&psig=AOvVaw1UpIvHdtHYw7QbovWyFivp&ust=1617199397826000&source=images&cd=vfe&ved=0CAkQjhxqFwoTCNCbp7GX2O8CFQAAAAAdAAAAABAP
https://stackoverflow.com/questions/6366385/use-cases-and-examples-of-gof-decorator-pattern-for-io
Reference
この問題について([デザインモード]Decorator Pattern,装飾モード), 我々は、より多くの情報をここで見つけました
https://velog.io/@cchloe2311/ㄷㄹㅋㅇㅌ
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について([デザインモード]Decorator Pattern,装飾モード), 我々は、より多くの情報をここで見つけました https://velog.io/@cchloe2311/ㄷㄹㅋㅇㅌテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol