デコレータ パターンは、元のクラスを変更せずにオブジェクトの機能を動的に追加できる構造設計パターンです。抽象コンポーネント、具象コンポーネント、抽象デコレータ、具象デコレータの連携によって実装され、ニーズの変化に合わせてクラス機能を柔軟に拡張できます。この例では、ミルクとモカのデコレーターが総額 2.29 ドルで Espresso に追加されており、オブジェクトの動作を動的に変更するデコレーター パターンの力を示しています。
Java デザイン パターンのデコレーター パターンの構造
はじめに
デコレーター パターンは、基本クラスを変更せずにオブジェクトに機能を動的に追加できるようにする構造的なデザイン パターンです。デコレータ オブジェクトを使用すると、変化するニーズに合わせてクラスの機能を柔軟に拡張できます。
原則
デコレータ パターンは次のように機能します:
コード例
// 抽象组件 interface Beverage { double cost(); } // 具体组件 class Espresso implements Beverage { @Override public double cost() { return 1.99; } } // 抽象装饰器 abstract class CondimentDecorator implements Beverage { protected Beverage beverage; public CondimentDecorator(Beverage beverage) { this.beverage = beverage; } } // 具体装饰器 class Milk extends CondimentDecorator { public Milk(Beverage beverage) { super(beverage); } @Override public double cost() { return beverage.cost() + 0.10; } } // 具体装饰器 class Mocha extends CondimentDecorator { public Mocha(Beverage beverage) { super(beverage); } @Override public double cost() { return beverage.cost() + 0.20; } } // 实战案例 public class CoffeeShop { public static void main(String[] args) { Beverage espresso = new Espresso(); // 添加牛奶和摩卡装饰器 Beverage milkEspresso = new Milk(espresso); Beverage mochaMilkEspresso = new Mocha(milkEspresso); // 计算饮料总价 double totalCost = mochaMilkEspresso.cost(); System.out.println("Beverage cost: " + totalCost); } }
出力:
Beverage cost: 2.29
結論
デコレータ パターンを使用すると、既存のコードを変更せずにオブジェクトの機能を動的に拡張できます。コードの保守性と拡張性を維持しながら、変化するニーズに対応する柔軟かつエレガントな方法を提供します。
以上がJava デザイン パターンにおけるデコレータ パターンの分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。