[デザインモード]-デコレータモード

1.デコレータモードの概要

1.デコレータパターンとは

デコレータパターンは、既存のオブジェクトの構造を変更せずに新しい機能を追加できるデザインパターンを実現するためのものです。このデザインパターンは構造デザインパターンです。通常の状況では、既存のクラスの機能または責任を拡張したいのですが、継承によって実装されるこのメソッドは、継承レベルの増加とともに増加し、静的機能がますます増え、サブクラスは非常に拡張されます、したがって、継承によって引き起こされるサブクラス拡張の問題を減らす方法が必要です。これがデコレータパターンです。

2.デコレータパターンのビジネスシナリオ

デコレータパターンは、一般的に2つの状況で使用されます。

  1. クラスの機能または責任を拡張するために使用されます
  2. オブジェクトの機能を拡張するために使用されます。この拡張はプラグ可能でリバーシブルです。

デコレータパターンの典型的な例は、孫悟空の72の変更です。孫悟空が気が変わっていないとき、彼は主人のことを話すことができました。孫悟空がミツバチになったとき、まだ主人のことは話せましたが、当時使っていた言葉がハチの鳴き声になり、ミツバチになりましたが、本質的には孫悟空でした。以下では、コードを使用して次のロジックを実装します。

第二に、デコレータパターンの実現

1.コードの実装

(1)物理インターフェースを作成する

public interface MonkeySun {
    
    

	void say();

}

(2)実装クラスを作成する

public class MonkeyKing implements MonkeySun {
    
    
// 齐天大圣
	@Override
	public void say() {
    
    
		// 叫师傅
		System.out.println("唐sensi!");
	}

}

(3)抽象的な装飾クラスを作成する

public abstract class MonkeySunDecorator implements MonkeySun {
    
    

	protected MonkeySun monkeySun;

	// 强制子类实现有参构造
	public MonkeySunDecorator(MonkeySun monkeySun) {
    
    
		super();
		this.monkeySun = monkeySun;
	}

	abstract void sayDecorator();

	// 默认采用已有方法,这样在使用的时候就可以使用未被装饰的API
	@Override
	public void say() {
    
    
		monkeySun.say();

	}

}

(4)装飾実装クラスを作成する

public class MonkeyBeeDecorator extends MonkeySunDecorator {
    
    

	public MonkeyBeeDecorator(MonkeySun monkeySun) {
    
    
		super(monkeySun);
		// TODO Auto-generated constructor stub
	}

	@Override
	void sayDecorator() {
    
    
		super.say();
		System.out.println("嗡嗡嗡");
		
	}

}

(5)テストコード

public class Test {
    
    

	public static void main(String[] args) {
    
    
		MonkeySunDecorator monkeyBeeDecorator = new MonkeyBeeDecorator(new MonkeyKing());
		monkeyBeeDecorator.say();
		monkeyBeeDecorator.sayDecorator();
	}
}

2.デコレータパターンの実装分析

図に示すように、
ここに画像の説明を挿入
デコレータモードは実際には2つの役割に分かれています。

  1. 飾る物:ここでは、飾る必要のある商品として理解できます。
  2. デコレータ:ここでのデコレータは2つの部分に分かれています。最初の部分はデコレータの親クラスです。通常、抽象クラスを使用してデコレータを記述します。この抽象クラスは通常、装飾された人物のインターフェースを実装し、装飾された人物をローカル変数として構築パラメーターを介して渡します。一部の学生が理解していない質問があるかもしれません。なぜインターフェースを実装し、参照を維持するためのパラメーターとしてそれを渡す必要があるのか​​。皆のための答えはここにあります:インターフェースの実装はデコレータが本質的に前のオブジェクトであるためです。インターフェースを実装するフォームを使用すると、ビジネスパーティは装飾メソッドを使用せずに元のインターフェースAPIを使用できます。デコレーションの前にオブジェクトのAPI関連情報を取得するためにパラメータとして渡されます。

3つ目は、デコレータモードの特徴です。

1.デコレータパターンの長所と短所

利点:

  1. 装飾クラスと装飾クラスは、結合せずに独立して開発できます

短所:

  1. 多層装飾によりコードの複雑さが改善されます

2.JDKでのデコレータパターンの参照

JDKでのIO構造の構築は、デコレータパターンを引用することであり、興味のある学生はIOクラスのソースコードを読んで学ぶことができます。

これで本日の内容は終わりです。ご不明な点がございましたら、個人的にメッセージをお送りいただくか、コメント欄にメッセージを残していただければ、お早めにお答えいたします。やりがいを感じている友達は、3回連続でワンクリックを覚え、ブロガーに注意を払い、迷子にならないで、売春婦になることを拒否してください〜

おすすめ

転載: blog.csdn.net/xiaoai1994/article/details/112858199