饰模式应用场景举例】
比如在玩“极品飞车”这款游戏,游戏中有对汽车进行喷涂鸦的功能,而且这个喷涂鸦是可以覆盖的,并且覆盖的顺序也影响到最后车身的显示效果,假设现在喷涂鸦具有2种样式:(1)红色火焰 (2)紫色霞光如果使用“继承父类”设计这样的功能,那么类图就像如下的这样:
从图中可以看到使用继承来实现这种功能,并且是2种涂鸦样式,就需要创建4个子类,如果喷涂鸦有3种,4种呢?这种情况就是典型中学课程学习过的“排列与组合”,那简直就是“Head First设计模式”书中讲的“类爆炸”。
显然继承“奥迪汽车类”的这个办法是无效,而且是非常徒劳,繁琐的。
那么如何才能以“灵活”,“顺序敏感”这样的需求来实现这样的功能呢?
【装饰模式解释】
类型:结构模式
动态的对一个对象进行功能上的扩展,也可以对其子类进行功能上的扩展。
【装饰模式UML图】
【装饰模式-JAVA代码实现】
新建一个抽象汽车父类:
package car_package;
public abstract class car_parent {
// 汽车抽象父类
private String make_address;
private int speed;
public String getMake_address() {
return make_address;
}
public void setMake_address(String make_address) {
this.make_address = make_address;
}
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
public abstract void print_face();
}
然后新建一个奥迪汽车子类
package car_package;
public class audi_sub extends car_parent {
// 奥迪汽车子类
@Override
public void print_face() {
System.out.println("audi车默认的颜色为 黑色");
}
}
然后再新建一个装饰者父类:
package decorator_package;
import car_package.car_parent;
public abstract class decorator_parent extends car_parent {
// 装饰者父类
protected car_parent car_parent_ref;
public void setCar_parent_ref(car_parent car_parent_ref) {
this.car_parent_ref = car_parent_ref;
}
@Override
public void print_face() {
car_parent_ref.print_face();
}
}
然后再新建装饰者子类:红色火焰装饰者类:
package decorator_package;
public class decorator_audi_red extends decorator_parent {
@Override
public void print_face() {
super.print_face();
System.out.println("给 奥迪 喷涂鸦 - 颜色为 红色火焰");
}
}
然后再新建装饰者子类:紫色霞光装饰者类:
package decorator_package;
public class decorator_audi_purple extends decorator_parent {
@Override
public void print_face() {
super.print_face();
System.out.println("给 奥迪 喷涂鸦 - 颜色为 紫色霞光");
}
}
新建一个运行类
package main_run;
import car_package.audi_sub;
import decorator_package.decorator_audi_purple;
import decorator_package.decorator_audi_red;
public class main_run {
public static void main(String[] args) {
audi_sub audi_sub_ref = new audi_sub();
audi_sub_ref.setMake_address("北京市朝阳区");
audi_sub_ref.setSpeed(200);
decorator_audi_red decorator_audi_red_ref = new decorator_audi_red();
decorator_audi_red_ref.setCar_parent_ref(audi_sub_ref);
decorator_audi_purple decorator_audi_purple_ref = new decorator_audi_purple();
decorator_audi_purple_ref.setCar_parent_ref(decorator_audi_red_ref);
decorator_audi_purple_ref.print_face();
}
}
程序运行结果如下:
audi车默认的颜色为 黑色
给 奥迪 喷涂鸦 - 颜色为 红色火焰
给 奥迪 喷涂鸦 - 颜色为 紫色霞光
从程序结构中可以看到,完全符合了前面我们的要求:“灵活”,“顺序敏感”。
分享到:
相关推荐
### 23种JAVA设计模式和15种J2EE设计模式详解 #### 一、JAVA设计模式概览 在软件工程领域,设计模式是一种在特定情境下解决常见问题的有效方法。Java作为一种广泛使用的编程语言,拥有丰富的设计模式库来帮助...
设计模式是软件开发中的一种重要概念,它是经过时间验证并被广泛接受的解决方案模板,用于解决常见的编程问题。设计模式的出现源于建筑学家Christopher Alexander的工作,他在建筑领域提出了模式的概念,即针对特定...
标题和描述中的“追MM与23种设计模式”巧妙地将追求恋人的社交情境与软件工程中的设计模式相联系,既生动又富有创意。这一主题不仅展现了设计模式的广泛应用,还通过日常生活的例子使复杂的概念变得易于理解。下面,...
### 关于Java23种设计模式的有趣见解 #### 一、工厂模式(Factory) **定义**:工厂模式是一种创建型设计模式,其中包含一个创建产品族的接口,但允许子类决定实例化哪一个类。工厂方法让类的实例化延迟到子类。 ...
装饰者模式是一种结构型设计模式,它允许向对象添加新的功能,同时无需修改其结构。这种类型的设计模式属于对象结构型模式,它在现有的行为上添加附加职责。 **案例解读**: 为女友准备生日礼物时,先选好礼物...
### 趣味JAVA23种设计模式精解 #### 工厂模式(Factory) 工厂模式是一种常用的软件设计模式,其核心在于分离客户类和工厂类。想象一下,当你带女朋友去快餐店,无论是麦当劳还是肯德基,只需要简单地说一句“来四...
### 23种设计模式的比喻详解 #### 创建型模式 **1. 工厂模式 (FACTORY)** - **应用场景**: 当你需要根据输入选择不同的产品时,工厂模式是一种非常实用的设计模式。例如,当你带女朋友去快餐店,无论是麦当劳还是...
程序设计模式是软件开发中的一种最佳实践,它们是解决常见问题的经验总结,旨在提高代码的重用性、可维护性和可扩展性。本篇解说将以趣味的“追MM”为比喻,来阐述几种常见的创建型模式和结构型模式。 1. **工厂...
【JAVA设计模式与J2EE设计模式】 设计模式是软件工程中的一种标准解决方案,用于解决常见问题和构建高质量、可维护的代码。Java设计模式分为两大类:创建型模式和结构型模式,它们在J2EE(Java 2 Enterprise ...
### 设计模式与现实生活 设计模式是在软件开发过程中对常见问题的一种解决方案的总结,它能够帮助开发者更好地组织代码,提高程序的复用性、灵活性和扩展性。本文将结合生活中的例子来形象地阐述几种常见的设计模式...
- **定义**: 装饰模式是一种结构型设计模式,允许向对象动态地添加新功能。 - **优点**: 在不影响其他对象的情况下增强功能。 - **实现**: - **Component类**: 定义被装饰对象的接口。 - **ConcreteComponent类**:...
1.1什么是设计模式 2 1.2设计模式的作用 3 1.3GRASP模式的分类 4 1.4GoF设计模式的分类 4 1.5模式的学习阶段 6 第2章负责任地设计对象——GRASP 9 2.1InformationExpert(信息专家) 11 2.2Creator(创造者)...
JAVA设计模式是软件开发中的重要概念,它们是解决常见编程问题的经验总结,旨在提高代码的重用性、可维护性和可扩展性。本文件涵盖了123种JAVA设计模式和15种J2EE设计模式,以下是其中部分设计模式的详解: 1. **...
- **定义**:装饰器模式是一种结构型设计模式,它允许向对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于对象结构型模式。 - **例子**:为了给Sally庆祝生日,你将一张照片加上相框,再精心包装起来...
以上只是23种设计模式中的一部分,其他还包括代理模式、装饰模式、观察者模式、迭代器模式、命令模式、责任链模式、备忘录模式、状态模式、策略模式、模板方法模式、访问者模式、享元模式、组合模式等。每种模式都有...
Java的23种设计模式是软件开发中常用的设计原则,它们可以帮助我们编写可维护、可扩展和可重用的代码。这些模式分为三大类:创建型模式、结构型模式和行为型模式。 创建型模式主要关注对象的创建,包括5种模式: 1...
本实验报告涵盖了六种经典的设计模式:单例模式、工厂模式、抽象工厂模式、建造者模式、适配器模式、桥接模式和装饰模式,通过C#控制台应用程序来实现和展示它们的特性与应用。 1. **单例模式**:确保一个类只有一...