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!