데코레이터 패턴은 원래 클래스를 수정하지 않고도 객체 기능을 동적으로 추가할 수 있는 구조적 디자인 패턴입니다. 추상 컴포넌트, 콘크리트 컴포넌트, 추상 데코레이터, 콘크리트 데코레이터의 협업을 통해 구현되며, 변화하는 요구에 맞게 클래스 기능을 유연하게 확장할 수 있습니다. 이 예에서는 우유와 모카 데코레이터가 총 $2.29의 가격으로 Espresso에 추가되어 객체의 동작을 동적으로 수정하는 데코레이터 패턴의 힘을 보여줍니다.
Java 디자인 패턴의 데코레이터 패턴 분석
소개
데코레이터 패턴은 기본 클래스를 수정하지 않고도 객체에 기능을 동적으로 추가할 수 있는 구조적 디자인 패턴입니다. 데코레이터 개체를 사용하면 변화하는 요구 사항에 맞게 클래스 기능을 유연하게 확장할 수 있습니다.
Principle
데코레이터 패턴은 다음과 같은 방식으로 작동합니다.
코드 예제
// 抽象组件 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!