


Java Design Patterns Decorator Pattern Detailed Explanation and Code Examples
The decorator pattern can dynamically add capabilities to existing objects. Below, I will use a simple example to demonstrate how to use the decorator pattern in a program.
1. Decorator Pattern
Let us assume that you are looking for a girlfriend. There are many girls from different countries, such as the United States, China, Japan, France, etc. Each of them has different personalities and interests. If you need to simulate such a situation in the program, assume that each girl is For a Java class, there will be thousands of classes, which will cause the expansion of classes, and the scalability of such a design will be relatively poor. Because if we need a new girl, we need to create a new Java class, which actually violates the OCP (open for extension, closed for modification) principle that needs to be followed in program development.
Let's make another design, so that each personality or hobby becomes a decoration that can be dynamically added to each girl's body.
2. Class diagram structure
3. Decorator pattern sample code
Girl.java
public abstract class Girl { String description = "no particular"; public String getDescription(){ return description; } }
AmericanGirl .java
public class AmericanGirl extends Girl { public AmericanGirl() { description = "+American"; } }
EuropeanGirl.java
public class EuropeanGirl extends Girl { public EuropeanGirl(){ description = "+European"; } }
GirlDecorator.java
public abstract class GirlDecorator extends Girl { public abstract String getDescription(); }
Science.java
public class Science extends GirlDecorator { private Girl girl; public Science(Girl girl){ this.girl = girl; } @Override public String getDescription() { return this.girl.getDescription() + "+Like Science"; } public void caltulateStuff() { System.out.println("scientific calculation!"); } }
Art.java
public class Art extends GirlDecorator { private Girl girl; public Art(Girl girl){ this.girl = girl; } @Override public String getDescription() { return this.girl.getDescription() + "+Like Art"; } public void draw() { System.out.println("draw pictures!"); } }
Main .java
public class Main { public static void main(String[] args) { //普通美国女孩 Girl g1 = new AmericanGirl(); System.out.println(g1.getDescription()); //喜欢科学的 Science g2 = new Science(g1); System.out.println(g2.getDescription()); //喜欢艺术的 Art g3 = new Art(g2); System.out.println(g3.getDescription()); } }
4. The application of the decorator pattern in JDK
The IO in Java is the most typical example of the use of the decorator pattern.
The following is a simple example of decorating an InputStreamReader object through a BufferedReader object:
BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); //System.in is an InputStream object
For more detailed explanations and code examples of the decorator pattern in Java design patterns, please pay attention to the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics











Troubleshooting and solutions to the company's security software that causes some applications to not function properly. Many companies will deploy security software in order to ensure internal network security. ...

Solutions to convert names to numbers to implement sorting In many application scenarios, users may need to sort in groups, especially in one...

Field mapping processing in system docking often encounters a difficult problem when performing system docking: how to effectively map the interface fields of system A...

Start Spring using IntelliJIDEAUltimate version...

Conversion of Java Objects and Arrays: In-depth discussion of the risks and correct methods of cast type conversion Many Java beginners will encounter the conversion of an object into an array...

When using MyBatis-Plus or other ORM frameworks for database operations, it is often necessary to construct query conditions based on the attribute name of the entity class. If you manually every time...

How does the Redis caching solution realize the requirements of product ranking list? During the development process, we often need to deal with the requirements of rankings, such as displaying a...

Detailed explanation of the design of SKU and SPU tables on e-commerce platforms This article will discuss the database design issues of SKU and SPU in e-commerce platforms, especially how to deal with user-defined sales...
