设计模式回顾系列文章: 主要针对工作中常用常见的设计模式进行整理、总结,同时分享以供大家拍砖。
------------------------------------------------
装饰者模式:
动态地给一个对象添加职责,可以无需创建子类,而扩展一个对象的功能。
适用情景:各种可选的功能在另一个肯定要执行的功能之前或者之后执行。
实现:创建一个抽象类来表示原类和要添加到这个类的新功能。在装饰类中,将对新功能的调用放在对紧随其后对象的调用之前或之后,以获得正确的顺序。
举例:在类使用时如果有多种组合情况时,例如:蛋糕类 -> 奶油蛋糕、巧克力蛋糕、果仁蛋糕、奶油巧克力蛋糕、奶油果仁蛋糕.....如果为每一种组合都建立一个子类的话,则需要很多子类,这时可以考虑装饰者模式。
程序实现:
接口:
public interface Work {
public void working();
}
原始实现类:
public class Programmer implements Work{
public void working() {
System.out.println("编写程序中...");
}
}
装饰类1:
public class ProgrammerDecorator implements Work{
private Work work;
public ProgrammerDecorator(Work work){
this.work = work;
}
public void working() {
designing();
work.working();//装饰顺序可变...
debuging();
}
//新增加的装饰性方法:设计程序
public void designing(){
System.out.println("设计程序中...");
}
//新增加的装饰性方法:修改Bug
public void debuging(){
System.out.println("修改Bug中...");
}
}
装饰类2:
public class TeamLeaderDecorator implements Work{
private Work work;
public TeamLeaderDecorator(Work work){
this.work=work;
}
public void working() {
allotTasks();
work.working();
}
//分配任务
public void allotTasks(){
System.out.println("分配任务");
}
}
程序入口:
public static void main(String[] args) {
Work programmer=new Programmer();
System.out.println("未被装饰时:");
programmer.working();//未被装饰时
System.out.println();
System.out.println("单重装饰后:");
ProgrammerDecorator pd=new ProgrammerDecorator(programmer);
pd.working();
System.out.println();
System.out.println("多重装饰后:");
TeamLeaderDecorator tld=new TeamLeaderDecorator(new ProgrammerDecorator(programmer));
tld.working();
}
举例:IO类库大量使用了装饰者模式,例如BufferedReader包装FileReader、BufferedInputStream包装FileInputStream等等,实现动态地给对象添加职责。
分享到:
相关推荐
如适配器模式(Adapter)、桥接模式(Bridge)、组合模式(Composite)、装饰者模式(Decorator)、外观模式(Facade)、享元模式(Flyweight)和代理模式(Proxy)等。 - **行为型模式**:关注于对象间的职责分配,...
在第25讲中,他集中对整个系列进行了一次全面的总结,让我们一起来回顾和探讨这些设计模式的核心要点。 设计模式是经过实践验证的、在特定场景下解决常见问题的最佳解决方案。它们是面向对象设计的智慧结晶,通过...
在本章节中,作者可能会回顾面向对象编程的基本概念,如封装、继承、多态等,并为后面介绍的设计模式奠定理论基础。 ### 2. 设计模式举例 这部分内容将通过具体的例子来介绍设计模式的应用场景,帮助读者理解不同...
Java设计模式迷你手册是一部浓缩了Java编程领域中设计模式精华的参考书,旨在帮助开发者理解和应用这些模式,提升代码质量和可维护性。设计模式是软件工程中...总之,掌握Java设计模式是提升编程技能的关键步骤之一。
- 第17章的装饰者模式(Decorator Pattern)可以在不改变对象接口的情况下动态地添加新的行为或责任。 - 第18章的观察者模式(Observer Pattern)定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有...
《精典设计模式》文档包含了丰富的软件开发中的设计模式知识,涵盖了C++和C#两种主流编程语言的应用。设计模式是解决软件设计中常见问题的经验总结...定期回顾和实践设计模式,将使你在软件开发的道路上更加得心应手。
首先,设计模式课件回顾了面向对象编程(Object-Oriented Programming,OOP)的基本原则,如封装、继承和多态,这些是设计模式依赖的基础。 接下来,课程深入讨论了GoF的设计模式。这些模式可以分为三类: 1. 创建...
在深入探讨设计模式之前,我们首先回顾C#中的面向对象特性: 1. **封装**:通过将数据和操作这些数据的方法封装在一个类中来实现。 2. **继承**:允许创建一个新的类继承现有类的属性和行为。 3. **多态**:同一个...
在书中,作者们将这二十三种设计模式分成了三类,分别是创建型模式、结构型模式和行为型模式。 创建型模式包含了: 工厂方法模式( Factory Method ) 抽象工厂模式( Abstract Factory ) 单例模式( Singleton ...
装饰者模式是一种结构型设计模式,它允许向一个现有的对象添加新的功能,同时又不改变其结构。在“追MM”的过程中,装饰者模式可以帮助你在现有基础上增加额外的追求方式,例如通过送花、写信等方式增强感情的表达。...
本书主要分为六个部分,涵盖了设计模式的基本概念、案例研究、以及三种类型的设计模式(创建型模式、结构型模式、行为型模式)。 ##### 1.1 什么是设计模式? 设计模式是一种在特定情境下解决常见问题的模板。它...
对于经验丰富的开发者,它可以作为回顾和巩固设计模式知识的工具。 总之,"设计模式学习"项目旨在帮助开发者掌握Java设计模式,提高编程技巧,以便在实际开发过程中写出更高质量、更具弹性的代码。通过深入学习并...
8. 装饰模式(Decorator Pattern):动态地给一个对象添加一些额外的职责。装饰模式提供了比继承更多的灵活性,避免了对类的大量修改。 9. 外观模式(Facade Pattern):为一个复杂的子系统提供一个简单的接口,...
### 设计模式在Java开发中的应用 #### 一、引言 《Design Patterns Java Workbook》是一本面向中级至高级Java开发者的重要参考书籍。本书由Steve Metsker撰写,并于2002年由Addison Wesley出版社出版。它以一种实践...
装饰者模式是一种结构型设计模式,它允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式是作为现有的类的一个包装。 **比喻理解:** 假设你和MM出去约会,你想给她一个惊喜。你可以事先...
设计模式是软件工程中的一种最佳实践,它是在特定上下文中解决常见问题的..."DesignPattern.rar"提供了一个全面学习设计模式的机会,无论你是初学者还是经验丰富的开发者,都应该深入探究,不断提升自己的编程素养。