1.デコレーションモード:オブジェクトにいくつかの追加の責任を動的に追加する関数を追加するという点では、デコレーションモードはサブクラスの生成よりも柔軟性があります。
2.利点:クラスの装飾機能をクラスから削除し、クラスの中心的な役割を装飾機能から効果的に分離し、関連するクラスで繰り返される装飾ロジックを削除します。
3.役割:
(1)抽象コンポーネントの役割:Person(抽象クラス)
(2)特定のコンポーネントの役割:OnePerson(装飾されるオブジェクトは抽象コンポーネントインターフェイスを実装します)
(3)装飾の役割:PersonDecorator(抽象コンポーネントインターフェースを実装するためにオブジェクトを装飾するために使用される装飾)
(4)特定の装飾ロール:RichPerson、SmartPerson、HighPerson(特定の装飾コンテンツ、装飾ロールクラスを継承)
3、デモ:
//装飾モード-
公開インターフェースPerson {
public void desc();
}
//装飾するオブジェクト-名前を入力します
public class OnePerson implements Person {
private String name;
public OnePerson(String name){
this.name = name;
}
@Override
public void desc(){
System.out.println( 「私は:」+名前);
}
}
//デコレータ-オブジェクトの装飾に使用されます
publicクラスPersonDecoratorはPerson {
private Person person;
public PersonDecorator(Person person){
this.person = person;
}
@Override
public void desc(){
person.desc();
}
}を実装します
パブリッククラスRichPersonはPersonDecoratorを拡張します{
public RichPerson(Person person){
super(person);
}
@Override
public void desc(){
super.desc();
System.out.println( "家里很富!");
}
}
パブリッククラスSmartPersonはPersonDecoratorを拡張します{
public SmartPerson(Person person){
super(person);
}
@Override
public void desc(){
super.desc();
System.out.println( "超级聪明!");
}
}
パブリッククラスHighPersonはPersonDecorator {
public HighPerson(Person person){
super(person);を拡張します。
}
@Override
public void desc(){
super.desc();
System.out.println( "长得很高!");
}
}
//テストクラス
public class MainTest {
public static void main(String [] args){
Person tom = new SmartPerson(new RichPerson(new HighPerson(new OnePerson( "tom"))));
tom.desc();
}
}
演算結果:
私は:トム
は非常に高くなる!
家族はとても豊かです!
超スマート!