首页 > 其他分享 >建造者模式

建造者模式

时间:2024-01-14 16:57:28浏览次数:26  
标签:String courseName 建造 private courseVideo coursePPT 模式 public

  • 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,用户只需要指定需要建造的类型就可以得到它们,建造过程及细节不需要知道
  • 使用场景:如果一个对象有非常复杂的数据结构(很多属性),想把复杂的创建和使用分离
  • 优点:
    •   封装性好,创建和使用分离
    •   扩展性好、建造类之间独立、一定程度上解耦
  • 缺点:
    •   产生多余的Builder对象
    •   产品内部发生变化建造者都要修改,成本较大
  • 和工厂模式的区别:
    •   建造者模式更注重于创建时方法的调用顺序,工厂模式注重于创建产品
    •   建造者可以创建一些复杂的产品,由各种复杂的部件组成,工厂模式创建出来的都是一个样
    •   工厂模式注重的只要把对象创建出来即可,而建造者模式不只要创建出产品,也还要知道这个产品由哪些部件组成

coding

public class Course {

    private String courseName;
    private String coursePPT;
    private String courseVideo;
    private String courseArticle;

    private String courseQA;

    public Course(CourseBuilder courseBuilder) {
        this.courseName = courseBuilder.courseName;
        this.coursePPT = courseBuilder.coursePPT;
        this.courseVideo = courseBuilder.courseVideo;
        this.courseArticle = courseBuilder.courseArticle;
        this.courseQA = courseBuilder.courseQA;
    }


    @Override
    public String toString() {
        return "Course{" +
                "courseName='" + courseName + '\'' +
                ", coursePPT='" + coursePPT + '\'' +
                ", courseVideo='" + courseVideo + '\'' +
                ", courseArticle='" + courseArticle + '\'' +
                ", courseQA='" + courseQA + '\'' +
                '}';
    }

    public static class CourseBuilder{
        private String courseName;
        private String coursePPT;
        private String courseVideo;
        private String courseArticle;

        private String courseQA;

        public CourseBuilder buildCourseName(String courseName){
            this.courseName = courseName;
            return this;
        }


        public CourseBuilder buildCoursePPT(String coursePPT) {
            this.coursePPT = coursePPT;
            return this;
        }

        public CourseBuilder buildCourseVideo(String courseVideo) {
            this.courseVideo = courseVideo;
            return this;
        }

        public CourseBuilder buildCourseArticle(String courseArticle) {
            this.courseArticle = courseArticle;
            return this;
        }

        public CourseBuilder buildCourseQA(String courseQA) {
            this.courseQA = courseQA;
            return this;
        }

        public Course build(){
            return new Course(this);
        }

    }
}
/**
 * 测试类
 */
public class Test {
    public static void main(String[] args) {
        Course course = new Course.CourseBuilder()
                .buildCourseName("设计模式")
                .buildCoursePPT("设计模式精讲PPT")
                .buildCourseVideo("设计模式精讲视频")
                .build();
        System.out.println(course);
    }
}
================================ 控制台输出 ===============================
Course{courseName='设计模式', coursePPT='设计模式精讲PPT', courseVideo='设计模式精讲视频', courseArticle='null', courseQA='null'}

 

UML

标签:String,courseName,建造,private,courseVideo,coursePPT,模式,public
From: https://www.cnblogs.com/wangzhilei-src/p/17963870

相关文章

  • Golang流水线设计模式实践
    Golang流水线设计模式实践原创 俞凡DeepNoMind DeepNoMind 2024-01-1411:45 发表于上海 听全文流水线设计模式对于顺序处理业务数据非常有用,可以以一致的方式直观的定义对数据的处理流程。原文: UsingaPipelinePatterninGolang[1]到目前为止,我已经将Gola......
  • 【软件开发学习笔记】设计模式
    【软件开发学习笔记】设计模式设计模式设计模式是一种针对面向对象语言的软件设计方法,是对类设计的约束和指导。设计模式由“原则”和“方法”两部分组成,一个设计良好的项目结构应能完美符合“原则”中的要求,而为了实现完美往往需要按照“方法”的指导去设计。原则:这是必须......
  • Java多线程编程实战指南(设计模式篇)PDF
    随着CPU多核时代的到来,多线程编程在充分利用计算资源、提高软件服务质量方面扮演了越来越重要的角色。而解决多线程编程中频繁出现的普遍问题可以借鉴设计模式所提供的现成解决方案。然而,多线程编程相关的设计模式书籍多采用C++作为描述语言,且书中所举的例子多与应用开发人员的......
  • 对单例模式的理解
    【零】引入【1】前言我们知道,经典设计模式总共有23种,但其中只有少数几种被广泛采用。根据我的工作经验,实际常用的可能不超过其中的一半。如果随机找一位程序员,并要求他列举出自己最熟悉的三种设计模式,那么单例模式肯定会是其中之一,这也是今天我们要讨论的。【2】为什么要......
  • spring与设计模式之三代理模式
    部分内容引用:https://blog.csdn.net/shulianghan/article/details/119798155一、定义1.1定义对于现实生活中的代理,大家非常好理解。我们需要代理,主要因为几个原因:太忙-例如房产中介、代购目前对象不是自身可以直接接触的-例如托人办事、例如掏钱购买某种服务都可以理解为代......
  • 代理模式(Proxy)
    代理模式(Proxy) 1.1.1摘要    今天是父亲节,首先祝爸爸父亲节快乐身体健康,随着互联网飞速的发展,现在许多软件系统都提供跨网络和系统的应用,但在跨网络和系统应用时,作为系统开发者并不希望客户直接访问系统中的对象。其中原因很多考虑到系统安全和性能因素,这时候聪明的开......
  • AntDesignBlazor示例——暗黑模式
    本示例是AntDesignBlazor的入门示例,在学习的同时分享出来,以供新手参考。示例代码仓库:https://gitee.com/known/BlazorDemo1.学习目标暗黑模式切换查找组件样式覆写组件样式2.添加暗黑模式切换组件1)双击打开MainLayout.razor文件,在header区域添加Switch组件及其事件来......
  • 单例模式(Singleton)的6种实现
    单例模式(Singleton)的6种实现 1.1.1摘要      在我们日常的工作中经常需要在应用程序中保持一个唯一的实例,如:IO处理,数据库操作等,由于这些对象都要占用重要的系统资源,所以我们必须限制这些实例的创建或始终使用一个公用的实例,这就是我们今天要介绍的——单例模式(Singl......
  • 设计模式之中介者模式
    1.定义多个对象之间通过一个中介者对象进行通信和协作,而不是直接相互交互2.口语化表述中介,这在生活中很常见,比如租房中介通常,有住房出租的房东有很多,需要租房的租客也很多,但是租客难以直接联系房东,这个时候租房中介这个职业就出现了房东将房屋登记到中介这里,租客来中介这里......
  • freeswitch: esl inbound模式下外呼拨号
    相信大家可能接到过一些电话,听上去不象是真人打过来的,比如:通知“您的信用卡到期了”,或者“您订的飞机航班取消了,请尽快改签或取消行程”,这种就是所谓的“自动外呼”系统,技术上讲,可以通过eslinbound模式实现(注:对esl不熟悉的朋友,戳这里)大概思路:先把一些要外呼的任务计划,落地存......