[Design pattern] Decorator Pattern 📿, (Structural patterns)
12239 ワード
Decorator pattern 📿
基本オブジェクトのモードに追加機能を動的に柔軟に追加
長所
短所
使用状況
GUIツールパッケージでは、スクロールなどの動作または属性(borderなど)をユーザーインタフェース要素にのみ追加する場合は、他の責任を負うためにオブジェクトに属性を追加する必要があります.
つまり、クラス全体に新しい機能を追加する必要はありませんが、単一のオブジェクトに新しい責任を追加する必要がある場合に使用できます.
Java APIファイルI/O関連部分でも使用されます.👇
BufferedReader bufferedreader = new BufferedReader(new FileReader(new File("daydream.txt")));
こうぞう
Tree
DefaultTree
Decorator
装飾するオブジェクトの抽象クラス
Red, Blue
DecoratorPattern
インプリメンテーション🛠
interface Tree {
String decorate();
}
class DefaultTree implements Tree {
@Override
public String decorate() {
return "Tree";
}
}
abstract class Decorator implements Tree {
private Tree tree;
public Decorator(Tree tree) {
this.tree = tree;
}
@Override
public String decorate() {
return tree.decorate();
}
}
class Red extends Decorator {
public Red(Tree tree) {
super(tree);
}
public String addRed() {
return " with Red";
}
@Override
public String decorate() {
return super.decorate() + addRed();
}
}
class Blue extends Decorator {
public Blue(Tree tree) {
super(tree);
}
public String addBlue() {
return " with Blue";
}
@Override
public String decorate() {
return super.decorate() + addBlue();
}
}
public class DecoratorPattern {
public static void main(String[] args) {
Tree tree = new DefaultTree();
System.out.println(tree.decorate());
Tree treeWithRed = new Red(new DefaultTree());
System.out.println(treeWithRed.decorate());
Tree treeWithRedWithBlue = new Blue(new Red(new DefaultTree()));
System.out.println(treeWithRedWithBlue.decorate());
}
}
実行結果🧐
Tree
Tree with Red
Tree with Red with Blue
上記の結果のように、新しい機能を柔軟に作成および追加できます.
Reference
この問題について([Design pattern] Decorator Pattern 📿, (Structural patterns)), 我々は、より多くの情報をここで見つけました https://velog.io/@daydream/Design-pattern-Decorator-Pattern-Structural-patternsテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol