Detailed explanation of decorator pattern examples in Java
This article mainly introduces the Java decorator pattern, and analyzes the principles of the decorator pattern and Java specific implementation techniques in detail in the form of examples. Friends in need can refer to it
The examples in this article describe the Java decorator model. Share it with everyone for your reference, the details are as follows:
Decoration mode
Without changing the original class file and using inheritance, dynamic Extend the functionality of an object. It wraps the real object by creating a wrapping object, that is, decoration.
The decoration object accepts all requests from the client. It forwards these requests to the real objects. Decorated objects can add additional functionality before or after forwarding these requests.
This ensures that additional functionality can be added externally at runtime without modifying the structure of a given object. In object-oriented design, functional extension of a given class is usually implemented through inheritance.
Advantages
1. The purpose of Decorator mode and inheritance relationship is to extend the functionality of objects, but Decorator mode can provide better performance than inheritance. More flexibility.
2. By using different specific decoration classes and the permutations and combinations of these decoration classes, designers can create many combinations of different behaviors.
Roles
The various roles in the decoration mode are:
(1) Abstract component (Component) role: Give an abstract interface, Preparing objects to receive additional responsibilities with specifications.
(2) Concrete Component role: Define a class that will receive additional responsibilities.
(3) Decorator role: Holds an instance of a component object and implements an interface consistent with the abstract component interface.
(4) Concrete Decorator role: Responsible for adding additional responsibilities to component objects.
Sample Code
Let’s take a hand cake as an example. Hand cakes can have many flavors, but the most basic one is an original hand cake. On this basis, we can add one or more combinations such as eggs, beef, tenderloin, etc.
Abstract Component (Component) role
package 装饰者模式; /** * 抽象类接口,规范饼的属性 * @author oooo * */ public interface Cake { //两个属性 public String descripestion(); //属性描述 public Double money(); //价格描述 }
Concrete Component (Concrete Component) role
package 装饰者模式; /** * 原味手抓饼类 * @author oooo *负责接收附加属性的类 */ public class shreddedcake implements Cake{ //实现Cake接口 @Override public String descripestion() { //描述属性 return "原味手抓饼"; } @Override public Double money() { //描述价格 return 3.5; } }
Decorator role
package 装饰者模式; /** * 建立和饼的连接,得到原始饼的属性,添加属性的中介。 * @author oooo * */ public abstract class Deractor implements Cake{ Cake cake; public Deractor(Cake cake) { this.cake=cake; } public String descripestion(){ return cake.descripestion(); } public Double money(){ return cake.money(); } }
Concrete Decorator role
##
package 装饰者模式; /** * 鸡蛋手抓饼类 * @author oooo *添加鸡蛋属性 */ public class EggshrededCake extends Deractor{ public EggshrededCake(Cake cake) { super(cake); } public String descripestion() { return "鸡蛋"+cake.descripestion(); } @Override public Double money() { return 3.5+1.5; } }
package 装饰者模式; /** * 牛肉味手抓饼 * @author oooo *添加牛肉属性 */ public class beffshredded extends Deractor{ public beffshredded(Cake cake) { super(cake); // TODO Auto-generated constructor stub } public String descripestion() { return "牛肉"+cake.descripestion(); } @Override public Double money() { return cake.money()+3.0; } }
package 装饰者模式; public class Test { /** * 测试类 * @param args */ public static void main(String[] args) { //新建一个原味手抓饼类 shreddedcake sh=new shreddedcake(); System.out.println(sh.descripestion()); System.out.print(" 价格: "+sh.money()); //新建一个鸡蛋类,附加鸡蛋属性到手抓饼上 EggshrededCake egg=new EggshrededCake(sh); System.out.println(egg.descripestion()); System.out.print(" 价格:"+egg.money()); //新建一个牛肉类,附加牛肉属性到手抓饼上 beffshredded beff=new beffshredded(egg); System.out.println(beff.descripestion()); System.out.print(" 价格:"+beff.money()); } }
原味手抓饼 价格: 3.5 鸡蛋原味手抓饼 价格:5.0 牛肉鸡蛋原味手抓饼 价格:8.0
The above is the detailed content of Detailed explanation of decorator pattern examples in Java. 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

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

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

PHP is a scripting language widely used on the server side, especially suitable for web development. 1.PHP can embed HTML, process HTTP requests and responses, and supports a variety of databases. 2.PHP is used to generate dynamic web content, process form data, access databases, etc., with strong community support and open source resources. 3. PHP is an interpreted language, and the execution process includes lexical analysis, grammatical analysis, compilation and execution. 4.PHP can be combined with MySQL for advanced applications such as user registration systems. 5. When debugging PHP, you can use functions such as error_reporting() and var_dump(). 6. Optimize PHP code to use caching mechanisms, optimize database queries and use built-in functions. 7

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHP is suitable for web development, with simple syntax and high execution efficiency. 2. Python is suitable for data science and machine learning, with concise syntax and rich libraries.

PHP is suitable for web development, especially in rapid development and processing dynamic content, but is not good at data science and enterprise-level applications. Compared with Python, PHP has more advantages in web development, but is not as good as Python in the field of data science; compared with Java, PHP performs worse in enterprise-level applications, but is more flexible in web development; compared with JavaScript, PHP is more concise in back-end development, but is not as good as JavaScript in front-end development.

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

PHP and Python each have their own advantages and are suitable for different scenarios. 1.PHP is suitable for web development and provides built-in web servers and rich function libraries. 2. Python is suitable for data science and machine learning, with concise syntax and a powerful standard library. When choosing, it should be decided based on project requirements.

Java is a popular programming language that can be learned by both beginners and experienced developers. This tutorial starts with basic concepts and progresses through advanced topics. After installing the Java Development Kit, you can practice programming by creating a simple "Hello, World!" program. After you understand the code, use the command prompt to compile and run the program, and "Hello, World!" will be output on the console. Learning Java starts your programming journey, and as your mastery deepens, you can create more complex applications.

The reasons why PHP is the preferred technology stack for many websites include its ease of use, strong community support, and widespread use. 1) Easy to learn and use, suitable for beginners. 2) Have a huge developer community and rich resources. 3) Widely used in WordPress, Drupal and other platforms. 4) Integrate tightly with web servers to simplify development deployment.
