03. Decorator Pattern
8707 ワード
オブジェクトに追加の責任を動的に付与
継承なしで柔軟かつ柔軟に機能を拡張
コンポーネント:各コンポーネントは、直接書き込むことも、レコーダによって包むこともできる(クラスまたはインタフェース) .機密コンポーネント:新しい動作を動的に追加 Decorator:インタフェースまたは抽象クラス 、装飾するコンポーネントなど ConcreteDecorator:オブジェクトが装飾された
Component
デフォルトクラス- を継承 concreteComponent Decorator
抽象クラス を採用 ConcreteDecorator Main
継承なしで柔軟かつ柔軟に機能を拡張
例-スターバックス飲料
デフォルトクラス-
public abstract class Beverage {
private String description = "제목 없";
public void setDescription(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
public abstract double cost();
}
public class HouseBlend extends Beverage{
public HouseBlend() {
super.setDescription("하우스 블렌드 커피");
}
@Override
public double cost() {
return .89;
}
}
抽象クラス
public abstract class CondimentDecorator extends Beverage {
public abstract String getDescription();
}
public class Mocha extends CondimentDecorator{
private Beverage beverage;
public Mocha(Beverage beverage) {
this.beverage = beverage;
}
@Override
public double cost() {
return beverage.cost() + .20;
}
@Override
public String getDescription() {
return beverage.getDescription() + ", 모카";
}
}
public class Main {
public static void main(String[] args) {
Beverage beverage = new HouseBlend();
beverage = new Mocha(beverage); // 데코레이터로 beverage 감싼다.
System.out.println(beverage.getDescription());
}
}
Reference
この問題について(03. Decorator Pattern), 我々は、より多くの情報をここで見つけました https://velog.io/@jimin3263/03.-Decorator-Patternテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol