网站正能量免费推广软件晚上,专业群建设 网站,做求职网站,青岛做教育的网站建设系列文章目录
设计模式之-6大设计原则简单易懂的理解以及它们的适用场景和代码示列 设计模式之-单列设计模式#xff0c;5种单例设计模式使用场景以及它们的优缺点 设计模式之-3种常见的工厂模式简单工厂模式、工厂方法模式和抽象工厂模式#xff0c;每一种模式的概念、使用…系列文章目录
设计模式之-6大设计原则简单易懂的理解以及它们的适用场景和代码示列 设计模式之-单列设计模式5种单例设计模式使用场景以及它们的优缺点 设计模式之-3种常见的工厂模式简单工厂模式、工厂方法模式和抽象工厂模式每一种模式的概念、使用场景和优缺点。 设计模式之模板方法模式通俗易懂快速理解以及模板方法模式的使用场景 设计模式之-建造者模式通俗易懂理解以及建造者模式的使用场景和示列代码 设计模式之-代理模式快速掌握理解代理模式以及代理模式的使用场景 设计模式之-原型模式快速掌握原型模式通俗易懂的理解原型模式以及使用场景 设计模式之-中介者模式快速掌握中介者模式通俗易懂的讲解中介者模式以及它的使用场景 设计模式之-责任链模式快速掌握责任链模式通俗易懂的讲解责任链模式以及它的使用场景 设计模式之-装饰模式快速掌握装饰模式通俗易懂的讲解装饰模式以及它的使用场景 设计模式之-适配器模式快速掌握适配器模式通俗易懂的讲解适配器模式以及它的使用场景 文章目录 系列文章目录一、快速理解装饰模式二、装饰模式使用场景代码示例 一、快速理解装饰模式
装饰模式是一种结构型设计模式它允许动态地将新功能添加到对象上同时又不改变其结构。装饰模式通过创建一个包装对象来包裹原始对象然后在包装对象中添加新的行为或功能。
在现实生活中装饰模式的例子可以是穿衣服。一个人原始对象可以穿不同的衣服装饰对象来增加新的功能或美化外观但人的本质并没有改变。
二、装饰模式使用场景
当需要在不修改现有对象的情况下动态地添加功能时可以使用装饰模式。装饰模式允许通过包装对象来扩展原始对象的功能而不是通过子类继承。当需要为多个独立的对象添加相同或类似的功能时可以使用装饰模式。装饰模式可以避免创建大量的子类来实现不同组合的功能。
代码示例
下面是一个通俗易懂的装饰模式示例代码以咖啡和调料为场景
// 抽象组件咖啡
interface Coffee {double getCost();String getDescription();
}// 具体组件浓缩咖啡
class Espresso implements Coffee {Overridepublic double getCost() {return 1.0;}Overridepublic String getDescription() {return Espresso;}
}// 抽象装饰器调料
abstract class CoffeeDecorator implements Coffee {protected Coffee coffee;public CoffeeDecorator(Coffee coffee) {this.coffee coffee;}Overridepublic double getCost() {return coffee.getCost();}Overridepublic String getDescription() {return coffee.getDescription();}
}// 具体装饰器牛奶
class Milk extends CoffeeDecorator {public Milk(Coffee coffee) {super(coffee);}Overridepublic double getCost() {return super.getCost() 0.5;}Overridepublic String getDescription() {return super.getDescription() Milk;}
}// 具体装饰器糖
class Sugar extends CoffeeDecorator {public Sugar(Coffee coffee) {super(coffee);}Overridepublic double getCost() {return super.getCost() 0.3;}Overridepublic String getDescription() {return super.getDescription() Sugar;}
}// 客户端代码
public class Main {public static void main(String[] args) {Coffee espresso new Espresso();Coffee milkCoffee new Milk(espresso);Coffee sugarMilkCoffee new Sugar(milkCoffee);System.out.println(Cost: sugarMilkCoffee.getCost());System.out.println(Description: sugarMilkCoffee.getDescription());}
}在上面的示例中Coffee是抽象组件定义了咖啡的方法。Espresso是具体组件实现了咖啡的方法。
CoffeeDecorator是抽象装饰器实现了咖啡的方法并包含一个咖啡对象的引用。Milk和Sugar是具体装饰器分别继承了抽象装饰器并在其中扩展了咖啡的功能。
在客户端代码中首先创建了一个浓缩咖啡对象espresso然后用Milk装饰了该咖啡对象再用Sugar装饰了装饰后的咖啡对象。最后通过调用装饰后的咖啡对象的方法获取咖啡的费用和描述。
通过使用装饰模式可以动态地添加功能或修改对象的行为同时又不改变其结构。装饰模式可以避免使用子类继承的方式来实现不同组合的功能使代码更加灵活和可扩展。