相关文章推荐
暴躁的仙人球  ·  安利到底能不能做(安利到底能做吗?) - 知乎·  2 年前    · 
暴躁的仙人球  ·  KATHERINE LI, ...·  2 年前    · 
暴躁的仙人球  ·  有哪些构图很强的画师?这位一定要安利给你! ...·  2 年前    · 
暴躁的仙人球  ·  安利,传销?直销?-郑州大学政治与公共管理学院·  2 年前    · 
暴躁的仙人球  ·  同样是安利,为什么有的人做得风生水起? - ...·  2 年前    · 
小百科  ›  【设计模式】建造者模式( 简介| 适用场景| 优缺点| 代码示例) 原创
安利模式 string 建造者
暴躁的仙人球
2 年前
  • 一、建造者模式简介
  • 二、建造者模式适用场景
  • 三、建造者模式优缺点
  • 四、建造者模式与工厂模式
  • 五、建造者模式代码示例
    • 1、学生类
    • 2、建造者抽象类
    • 3、建造者实现类
    • 4、教师类 ( 非必须 )
    • 5、测试类
  • 六、实例类和建造者类定义在同一个类中 ( 建造者模式常用用法 )
    • 1、实例类 + 建造者类
    • 2、测试类

    建造者模式 : 将 一个复杂对象 的 构建过程 与其 表示 分离 , 使得 同样的构建过程 , 可以 创建不同的表示 ;

    用户只需要 指定 需要建造的类型 就可以 得到该类型对应的产品实例 , 不关心建造过程细节 ;

    建造者模式就是 如何逐步构建包含多个组件的对象 , 相同的构建过程 , 可以创建不同的产品 ,

    建造者模式类型 : 创建型 ;

    ", age='" + age + '\'' + ", number='" + number + '\'' + ", address='" + address + '\'' + ", school='" + school + '\'' + '}' ;

    2、建造者抽象类

    package builder;
     * 抽象建造者
    public abstract class StudentBuilder {
        public abstract void buildName(String name);
        public abstract void buildAge(String age);
        public abstract void buildNumber(String number);
        public abstract void buildAddress(String address);
        public abstract void buildSchool(String school);
        public abstract Student makeCourse();
    

    3、建造者实现类

    package builder;
     * 建造者实现类
    public class StudentBuilderImpl extends StudentBuilder {
        private Student student = new Student();
        @Override
        public void buildName(String name) {
            this.student.setName(name);
        @Override
        public void buildAge(String age) {
            this.student.setAge(age);
        @Override
        public void buildNumber(String number) {
            this.student.setNumber(number);
        @Override
        public void buildAddress(String address) {
            this.student.setAddress(address);
        @Override
        public void buildSchool(String school) {
            this.student.setSchool(school);
        @Override
        public Student makeCourse() {
            return this.student;
    

    4、教师类 ( 非必须 )

    package builder;
     * 教师类 , 负责使用建造者创建学生信息
    public class Teacher {
         * 持有学生建造者
        private StudentBuilder studentBuilder;
         * 构造函数注入建造者
         * @param studentBuilder
        public Teacher(StudentBuilder studentBuilder) {
            this.studentBuilder = studentBuilder;
         * 调用建造者对象创建 学生 实例对象
         * @param name
         * @param age
         * @param number
         * @param address
         * @param school
         * @return
        public Student makeStudent(String name, String age,
                                   String number, String address,
                                   String school) {
            this.studentBuilder.buildName(name);
            this.studentBuilder.buildAge(age);
            this.studentBuilder.buildNumber(number);
            this.studentBuilder.buildAddress(address);
            this.studentBuilder.buildSchool(school);
            return this.studentBuilder.makeCourse();
    

    5、测试类

    package builder;
    public class Main {
        public static void main(String[] args) {
            // 创建学生对象建造者
            StudentBuilder studentBuilder = new StudentBuilderImpl();
            // 创建教师对象
            Teacher teacher = new Teacher(studentBuilder);
            // 教师对象使用学生建造者创建学生 实例对象
            Student student = teacher.makeStudent(
                    "小明",
                    "12" ,
                    "1",
                    "学院路",
                    "第一小学");
            System.out.println(student);
    

    执行结果 :

    Student{name='小明', age='12', number='1', address='学院路', school='第一小学'}
        public Student(StudentBuilder builder) {
            this.name = builder.name;
            this.age = builder.age;
            this.number =
    
    
    
    
        
     builder.number;
            this.address = builder.address;
            this.school = builder.school;
        public String getName() {
            return name;
        public void setName(String name) {
            this.name = name;
        public String getAge() {
            return age;
        public void setAge(String age) {
            this.age = age;
        public String getNumber() {
            return number;
        public void setNumber(String number) {
            this.number = number;
        public String getAddress() {
            return address;
        public void setAddress(String address) {
            this.address = address;
        public String getSchool() {
            return school;
        public void setSchool(String school) {
            this.school = school;
        @Override
        public String toString() {
            return "Student{" +
                    "name='" + name + '\'' +
                    ", age='" + age + '\'' +
                    ", number='" + number + '\'' +
                    ", address='" + address + '\'' +
                    ", school='" + school + '\'' +
                    '}';
         * 使用静态内部类作为创建者
         *      将具体的业务类 及其 创建者 定义在一个类中
         * 使用链式调用 , 每个 build 步骤都返回创建者本身
        public static class StudentBuilder {
            private String name;
            private String age;
            private String number;
            private String address;
            private String school;
            public StudentBuilder buildName(String name) {
                this.name = name;
                return this;
            public StudentBuilder buildAge(String age) {
                this.age = age;
                return this;
            public StudentBuilder buildNumber(String number) {
                this.number = number;
                return this;
            public StudentBuilder buildAddress(String address) {
                this.address = address;
                return this;
            public StudentBuilder buildSchool(String school) {
                this.school = school;
                return this;
            public Student build() {
                return new Student(this);
    

    2、测试类

    package builder2;
    public class Main {
        public static void main(String[] args) {
            // 使用链式调用 , 一行代码创建实例对象
            Student student = new Student.StudentBuilder()
                    .buildName("小明")
                    .buildAge("12")
                    .buildNumber("1")
                    .buildAddress("学院路")
                    .buildSchool("第一小学")
                    .build();
            System.out.println(student);
    

    执行结果 :

    Student{name='小明', age='12', number='1', address='学院路', school='第一小学'}
                        一、建造者模式简介、二、建造者模式适用场景、三、建造者模式优缺点、四、建造者模式与工厂模式、五、建造者模式代码示例、1、学生类、2、建造者抽象类、3、建造者实现类、4、教师类 ( 非必须 )、5、测试类、六、实例类和建造者类定义在同一个类中 ( 建造者模式常用用法 )、1、实例类 + 建造者类、2、测试类、
    				
    开头日常吹牛 我想大家在平时写代码的过程中肯定会去想这个类我怎么写简洁点,或者后面容易维护些.毕竟项目一大起来,代码量上去了以后,就算之前写的时候有写注释,但回过头来看总是需要再捋一遍,这就很浪费时间,毕竟大家都不想拿自己的下班时间来加班,程序员要懒一点好.这个时候设计模式的应用开始变得重要起来.在这里给大家安利一点小小的设计模式 关于设计模式,社区里已经很多人写过,也有更清楚更详细的介绍,总...
    建造者模式,又称构建者模式,将一部负责对象的构建分为许多小对象的构建,最后在整合构建的模式。   构建者模式一般用在构建流程或者组成部件固定的场合,将这些部件分开构建成为组件对象,再将这些组件对象整合成为目标对象。 这里引用下别人画的类图: 成员分析:     Director:控制者类,这是控制整个组...
    相信我们基本都买过台式电脑吧。我们应该不会去买主板,CPU,内存等等子部件回家,然后自己组装成台式机。当然,也不排除某些发烧友这样做。但是对于多数人来说,我们只需要对老板说,我需要一台联想的或者惠普的电脑,老板组装好给我们就OK了。我们买车也是这样的,只是买一台车回家,而不是买回一堆的发动机等等零件。 上面的例子,抽象一下,就是建造者模式。 建造者模式是创建模式中最复杂的,这个复杂指的是类的结构和实现会复杂一些。它的使用场景不复杂,很好理解。就是创建复杂对象。什么
    建造者设计模式是一种创建对象的设计模式,旨在将复杂对象的构建过程和其表示相互分离,使得同样的构建过程可以创建不同的表示形式。下面是一个使用Java语言实现的建造者设计模式的示例代码: public class Product { private String partA; private String partB; private String partC; public void setPartA(String partA) { this.partA = partA; public void setPartB(String partB) { this.partB = partB; public void setPartC(String partC) { this.partC = partC; public String getParts() { return "PartA: " + partA + ", PartB: " + partB + ", PartC: " + partC; public interface Builder { void buildPartA(); void buildPartB(); void buildPartC(); Product getProduct(); public class ConcreteBuilder implements Builder { private Product product = new Product(); public void buildPartA() { product.setPartA("PartA"); public void buildPartB() { product.setPartB("PartB"); public void buildPartC() { product.setPartC("PartC"); public Product getProduct() { return product; public class Director { public void construct(Builder builder) { builder.buildPartA(); builder.buildPartB(); builder.buildPartC(); public class Client { public static void main(String[] args) { Director director = new Director(); Builder builder = new ConcreteBuilder(); director.construct(builder); Product product = builder.getProduct(); System.out.println(product.getParts()); 这个示例代码中,Product表示最终构建出来的对象,Builder定义了如何构建Product对象的抽象接口,ConcreteBuilder实现了具体的构建方法,Director负责使用Builder来构建Product对象,Client负责创建Director和Builder并执行构建过程。这种实现方式可以在不同的场景中创建不同的Product对象。
    【Python】模块导入 ③ ( 模块导入语法 | from 导入部分模块功能 | 为导入的模块设置别名 | import 导入模块设置别名 | from 导入模块设置别名 ) 虚心求知的熊: 非常实用,博主介绍的非常详细,学到了许多新知识,希望大佬也能对我的文章指点下! 【Python】模块导入 ③ ( 模块导入语法 | from 导入部分模块功能 | 为导入的模块设置别名 | import 导入模块设置别名 | from 导入模块设置别名 ) 阿Q说代码: 大佬写的非常好,文笔清晰,内容优质,感谢大佬分享!期待博主更多优质好文 【Python】模块导入 ③ ( 模块导入语法 | from 导入部分模块功能 | 为导入的模块设置别名 | import 导入模块设置别名 | from 导入模块设置别名 ) 总结的太详细了,高端的文章往往出在大佬之手,太用心了,必须三连支持博主,期待博主的下次更新 【Python】模块导入 ③ ( 模块导入语法 | from 导入部分模块功能 | 为导入的模块设置别名 | import 导入模块设置别名 | from 导入模块设置别名 ) KJ.JK: 总结的太详细了,干货满满,太用心了,必须三连支持博主,期待博主的下次更新
 
推荐文章
暴躁的仙人球  ·  安利到底能不能做(安利到底能做吗?) - 知乎
2 年前
暴躁的仙人球  ·  KATHERINE LI, 亚太数字化中心副总裁, 安利| Michael Page
2 年前
暴躁的仙人球  ·  有哪些构图很强的画师?这位一定要安利给你! - 知乎
2 年前
暴躁的仙人球  ·  安利,传销?直销?-郑州大学政治与公共管理学院
2 年前
暴躁的仙人球  ·  同样是安利,为什么有的人做得风生水起? - 石小琴- 简书
2 年前
Link管理   ·   Sov5搜索   ·   小百科
小百科 - 百科知识指南