This article mainly introduces the builder pattern of the Java design pattern, and analyzes the concept, principles, implementation methods and related usage precautions of the builder pattern in combination with specific examples. Friends in need can refer to it
The examples in this article describe the builder pattern of Java design patterns. Share it with everyone for your reference, the details are as follows:
Builder mode (builder) can separate components and their assembly process. Create a complex object step by step.
Users only need to specify the type of a complex object to obtain the object, without knowing its internal specific construction details.
Under what circumstances will the builder pattern be used?
Personally understand that when the object we create requires logic when it is created.
For example, if we want to create a simple pojo object, we can directly create it with new, without any logic.
When you have a complex object and you want to create it, there is a logical relationship between its various properties.
The value assigned to an attribute depends on other attributes. Then the creation of this object is not simply new.
Before creating, we must write this logic clearly.
Building mode prevents customers from knowing too many internal details of the product. It encapsulates the composition and representation of complex objects in a specific construction role, and the leader coordinates the construction role to obtain specific product instances.
Its model:
Abstract product class Product
package org.test.design.build; /** * 影视,书籍等作品 * @author lushuaiyin * */ public abstract class Product { public String author;//作者 public int funds=0;//耗资 public String workName;//作品名称 public String workType;//作品类型 public String content;//其他信息 public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public int getFunds() { return funds; } public void setFunds(int funds) { this.funds = funds; } public String getWorkName() { return workName; } public void setWorkName(String workName) { this.workName = workName; } public String getWorkType() { return workType; } public void setWorkType(String workType) { this.workType = workType; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String printString() { return "Product [author=" + author + ", funds=" + funds + ", workName=" + workName + ", workType=" + workType + ", content=" + content + "]"; } }
Specific Product Category Movie Book
package org.test.design.build; public class Movie extends Product{ private String actor;//主演 private String director;//导演 public String getActor() { return actor; } public void setActor(String actor) { this.actor = actor; } public String getDirector() { return director; } public void setDirector(String director) { this.director = director; } }
package org.test.design.build; public class Book extends Product { private int price=0; public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } }
Abstract Builder Builder
package org.test.design.build; /** * 对象的构建逻辑描述 * 影视,书籍等作品创建步骤 * @author lushuaiyin * */ public interface Builder { void recruiting();//人员招募 void writeScript();//写剧本,书 void raiseFunds();//筹集资金 void propagate();//宣传 void released();//出版,发行,上映 Product buildProduct(); }
Specific Builder MovieBuilder BookBuilder
package org.test.design.build; /** * Movie对象的构建逻辑具体实施 * @author lushuaiyin * */ public class MovieBuilder implements Builder { public Product movie=new Movie();//这里是上转型对象的使用 /* 假如我们创建的对象只关心行为特征,那么就可以使用父类或者接口来声明对象。 这样就不会在创建的时候就不会涉及到具体对象类的其他私有属性。 如果我们在创建的时候,关心这些属性。那么就直接使用子类new出对象。 Movie movie=new Movie(); */ public void recruiting() { movie.setAuthor("詹姆斯·卡梅隆"); } public void writeScript() { movie.setWorkName("阿凡达"); } public void raiseFunds() { movie.setFunds(200000); } public void propagate() { movie.setContent("首部3D科幻巨作!"); } public void released() { movie.setWorkType("3D电影"); } public Product buildProduct() { return movie; } }
package org.test.design.build; /** * Book对象的构建逻辑具体实施 * @author lushuaiyin * */ public class BookBuilder implements Builder { public Product book=new Book();//这里是上转型对象的使用 public void recruiting() { book.setAuthor("J.K.罗琳著小说"); } public void writeScript() { book.setWorkName("哈利·波特与魔法石"); } public void raiseFunds() { book.setFunds(10000); } public void propagate() { book.setContent("最畅销的的魔幻小说!"); } public void released() { book.setWorkType("小说"); } public Product buildProduct() { return book; } }
Director Director
package org.test.design.build; /** * 指挥者角色 * @author lushuaiyin * */ public class Director { public Product bulidProduct(Builder builder){ builder.raiseFunds();//筹集资金 builder.recruiting();//招募人员 builder.propagate();//宣传 builder.released();//发行,上映 return builder.buildProduct(); } }
Test:
package org.test.design.build; public class TestMain { /** * @param args */ public static void main(String[] args) { Director director=new Director();//指挥者角色 //一部电影的产生 MovieBuilder movieBuilder=new MovieBuilder(); Product movie=director.bulidProduct(movieBuilder); System.out.println(movie.printString()); // 一部小说的产生 BookBuilder bookBuilder=new BookBuilder(); Product book=director.bulidProduct(bookBuilder); System.out.println(book.printString()); } } /*打印 Product [author=詹姆斯·卡梅隆, funds=200000, workName=null, workType=3D电影, content=首部3D科幻巨作!] Product [author=J.K.罗琳著小说, funds=10000, workName=null, workType=小说, content=最畅销的的魔幻小说!] */
The above is the detailed content of Examples of builder pattern in Java design patterns. For more information, please follow other related articles on the PHP Chinese website!

Start Spring using IntelliJIDEAUltimate version...

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...

Java...

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...

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...

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

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...

How to set the SpringBoot project default run configuration list in Idea using IntelliJ...


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

Atom editor mac version download
The most popular open source editor

SublimeText3 Linux new version
SublimeText3 Linux latest version

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

Zend Studio 13.0.1
Powerful PHP integrated development environment

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.