


What are the principles and implementation methods of the decoration pattern in Java design patterns?
1. What is the decoration mode
When we want to improve or enhance the functionality of an object, but do not want to inherit the class and create subclasses, we can consider using the decoration mode.
Using decoration mode to enhance a certain function of an object is more flexible than generating a subclass and then enhancing it.
2. How to implement
1) Abstract component: Define an abstract class that defines the method that the "decorator" needs to be "decorated"
2 ) Concrete component: a subclass of abstract component. Become a "decorated class"
3) Decorative component: It is also a subclass of abstract component. This class holds a reference to the "decorator" and is used to call the decorator's methods. It can be an abstract class or a non-abstract class.
4) Concrete decoration class: It is a subclass of decoration component, called "decorator"
3. Code implementation
1) Abstract component
/** * 抽象组件,定义了被装饰类需要装饰的方法 */ public abstract class ICake { /** * 需要装饰的方法 * @return */ public abstract int getPrice(); }
2) Decorated person
/** * 被装饰者,是抽象组件的一个子类,定义需要被装饰的方法 */ public class Cake extends ICake { /** * 被装饰类中,装饰方法的基本实现 * @return */ @Override public int getPrice() { System.out.println("getPrice"); return 100; } }
3) Decoration class
/** * 装饰类,也是抽象组件的一个子类。 * 可以是抽象类,也可以是非抽象类。 */ public abstract class CakeDecorator extends ICake { /** * 被装饰类的引用,需要在装饰类中,调用到被装饰类的方法。 */ ICake cake; public CakeDecorator(ICake cake){ this.cake = cake; } }
4) Specific decoration
/** * 具体装饰类 */ public class BlueBerryCake extends CakeDecorator { public BlueBerryCake(ICake cake) { super(cake); } /** * 被装饰的方法 * 在调用到被装饰类的基础方法后,还要调用装饰类要增强的方法 * @return */ @Override public float getPrice(){ return cake.getPrice()+elsePrice(); } /** * 增强的方法 * @return */ private float elsePrice(){ System.out.println("else getPrice"); return 50; } }
5) Test class
public class TestDecorator { public static void main(String args[]){ ICake cake = new Cake(); CakeDecorator decorater = new BlueBerryCake(cake); float price = decorater.getPrice(); System.out.println(price); } }
4 .Expansion
1) The enhancement of a certain method can also be achieved by using subclass inheritance. Compared with implementing through decoration mode, what are the advantages of decoration mode?
The decorator and the decorator are loosely coupled. The decoration class only depends on the abstract component. The decoration class only needs to know that the decorated class is a subclass of the abstract component, without knowing which subclass it is.
The decoration mode satisfies the "open-close principle". You can add a decoration class for the component without modifying the specific component.
5.JavaIo and decoration mode
Many classes in the java.IO package use the decoration mode.
Reader
FileReader
BufferdReader
The above is the detailed content of What are the principles and implementation methods of the decoration pattern in Java design patterns?. For more information, please follow other related articles on 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

AI Hentai Generator
Generate AI Hentai for free.

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



Guide to Perfect Number in Java. Here we discuss the Definition, How to check Perfect number in Java?, examples with code implementation.

Guide to Random Number Generator in Java. Here we discuss Functions in Java with examples and two different Generators with ther examples.

Guide to Weka in Java. Here we discuss the Introduction, how to use weka java, the type of platform, and advantages with examples.

Guide to Smith Number in Java. Here we discuss the Definition, How to check smith number in Java? example with code implementation.

In this article, we have kept the most asked Java Spring Interview Questions with their detailed answers. So that you can crack the interview.

Java 8 introduces the Stream API, providing a powerful and expressive way to process data collections. However, a common question when using Stream is: How to break or return from a forEach operation? Traditional loops allow for early interruption or return, but Stream's forEach method does not directly support this method. This article will explain the reasons and explore alternative methods for implementing premature termination in Stream processing systems. Further reading: Java Stream API improvements Understand Stream forEach The forEach method is a terminal operation that performs one operation on each element in the Stream. Its design intention is

Guide to TimeStamp to Date in Java. Here we also discuss the introduction and how to convert timestamp to date in java along with examples.

Capsules are three-dimensional geometric figures, composed of a cylinder and a hemisphere at both ends. The volume of the capsule can be calculated by adding the volume of the cylinder and the volume of the hemisphere at both ends. This tutorial will discuss how to calculate the volume of a given capsule in Java using different methods. Capsule volume formula The formula for capsule volume is as follows: Capsule volume = Cylindrical volume Volume Two hemisphere volume in, r: The radius of the hemisphere. h: The height of the cylinder (excluding the hemisphere). Example 1 enter Radius = 5 units Height = 10 units Output Volume = 1570.8 cubic units explain Calculate volume using formula: Volume = π × r2 × h (4
