デコレータパターン
7650 ワード
動的にオブジェクトに追加の責任を付けます.デコレータは、拡張機能のためのサブクラス化に柔軟な代替を提供します.
コンポーネント:動的に追加された責任を持つオブジェクトのインターフェイスを定義します. 具体的には追加の責任を付加できるオブジェクトを定義します. Decorator :コンポーネントオブジェクトへの参照を維持し、コンポーネントのインターフェイスに準拠するインターフェイスを定義します. ConcreteDecorator :コンポーネントに責任を追加します. コード
参加者
コード
public class Main {
public static void main(String[] args) {
ConcreteComponent c = new ConcreteComponent();
ConcreteDecoratorA d1 = new ConcreteDecoratorA();
ConcreteDecoratorB d2 = new ConcreteDecoratorB();
d1.setComponent(c);
d2.setComponent(d1);
d2.operation();
}
}
public interface Component {
void operation();
}
public class ConcreteComponent implements Component {
@Override
public void operation() {
System.out.println("ConcreteComponent.operation()");
}
}
public abstract class Decorator implements Component {
protected Component component;
public void setComponent(Component component) {
this.component = component;
}
@Override
public void operation() {
if (component != null) {
component.operation();
}
}
}
public class ConcreteDecoratorA extends Decorator {
private static final String ADDED_STATE = "ConcreteDecoratorA.operation()";
@Override
public void operation() {
super.operation();
System.out.println(ADDED_STATE);
}
}
public class ConcreteDecoratorB extends Decorator {
@Override
public void operation() {
super.operation();
addedBehavior();
System.out.println("ConcreteDecoratorB.operation()");
}
private void addedBehavior() {
System.out.println("ConcreteDecoratorB.addedBehavior()");
}
}
出力
ConcreteComponent.operation()
ConcreteDecoratorA.operation()
ConcreteDecoratorB.addedBehavior()
ConcreteDecoratorB.operation()
エディエルジュリアン61
/
デザインパターン
メインデザインパターン
アイドル・ Sep 27・ 1分読む
#designpatterns
#creational
#structural
#behavioral
Reference
この問題について(デコレータパターン), 我々は、より多くの情報をここで見つけました
https://dev.to/eidher/decorator-pattern-2gmp
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
public class Main {
public static void main(String[] args) {
ConcreteComponent c = new ConcreteComponent();
ConcreteDecoratorA d1 = new ConcreteDecoratorA();
ConcreteDecoratorB d2 = new ConcreteDecoratorB();
d1.setComponent(c);
d2.setComponent(d1);
d2.operation();
}
}
public interface Component {
void operation();
}
public class ConcreteComponent implements Component {
@Override
public void operation() {
System.out.println("ConcreteComponent.operation()");
}
}
public abstract class Decorator implements Component {
protected Component component;
public void setComponent(Component component) {
this.component = component;
}
@Override
public void operation() {
if (component != null) {
component.operation();
}
}
}
public class ConcreteDecoratorA extends Decorator {
private static final String ADDED_STATE = "ConcreteDecoratorA.operation()";
@Override
public void operation() {
super.operation();
System.out.println(ADDED_STATE);
}
}
public class ConcreteDecoratorB extends Decorator {
@Override
public void operation() {
super.operation();
addedBehavior();
System.out.println("ConcreteDecoratorB.operation()");
}
private void addedBehavior() {
System.out.println("ConcreteDecoratorB.addedBehavior()");
}
}
ConcreteComponent.operation()
ConcreteDecoratorA.operation()
ConcreteDecoratorB.addedBehavior()
ConcreteDecoratorB.operation()
エディエルジュリアン61 / デザインパターン
メインデザインパターン
アイドル・ Sep 27・ 1分読む
#designpatterns
#creational
#structural
#behavioral
Reference
この問題について(デコレータパターン), 我々は、より多くの情報をここで見つけました https://dev.to/eidher/decorator-pattern-2gmpテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol