文档章节

设计模式-构造者(建造者)模式

月夜筱风
 月夜筱风
发布于 2017/08/17 15:54
字数 609
阅读 10
收藏 0

一,定义

一般是用来构造一个类并含有一些属性,比直接使用setter和getter高大上些

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

用指挥官(Director)中包含的构造方法(Contruct,参数为一个抽象的Builder,其中builder中含有所要构建的具体的属性方法,还有结果)去创建具体的产品(productA/productB ----->都继承自Builder),

输入图片说明

一,使用lombok生成的简单builder代码:

这个适用于对属性的简单的setter操作,复杂一些的看下面那个例子

package com.boot.lijunhao.builder;

import lombok.Builder;
import lombok.Data;

/**
 * Created by lijunhao on 2017/8/17.
 */
@Builder
@Data
public class LombokDemo {

    private String name;

    private Integer age;

    public static void main(String[] args) {
        LombokDemo wyz = LombokDemo.builder().age(12).name("吴彦祖").build();
        System.out.println(wyz); //LombokDemo(name=吴彦祖, age=12)
    
    }
}

二,普通构造代码实现

代码目录:

输入图片说明

package com.boot.lijunhao.builder;

/**
 * Created by lijunhao on 2017/8/17.
 */
public class Director {

    public void Contruct(Product.Builder builder){
        //指挥官想要创建part1
        builder.buildPart1();
        //指挥官想要创建part2
        builder.buildPart2();
        //指挥官想要创建part3
        builder.buildPart3();
    }

    public void Contruct2(Product.Builder builder){
        //指挥官想要创建part
        builder.buildPart1();
    }
}

package com.boot.lijunhao.builder;

import lombok.Data;

/**
 *
 * 具体的产品
 * Created by lijunhao on 2017/8/17.
 */
@Data
public class Product {

    private String part1;

    private String part2;

    private String part3;

    //要构造的属性还有结果值(Product)
    abstract static class Builder{
        public abstract void buildPart1();

        public abstract void buildPart2();

        public abstract void buildPart3();

        public abstract Product getResout();
    }
}

package com.boot.lijunhao.builder;

/**
 * Created by lijunhao on 2017/8/17.
 */
public class ProductA extends Product.Builder{
    private Product product=new Product();
    @Override
    public void buildPart1() {
        product.setPart1("A1");
    }

    @Override
    public void buildPart2() {
        product.setPart2("A2");
    }

    @Override
    public void buildPart3() {
        product.setPart3("A3");
    }

    @Override
    public Product getResout() {
        return product;
    }
}

package com.boot.lijunhao.builder;

/**
 * Created by lijunhao on 2017/8/17.
 */
public class ProductB extends Product.Builder{
    private Product product=new Product();
    @Override
    public void buildPart1() {
        product.setPart1("B1");
    }

    @Override
    public void buildPart2() {
        product.setPart2("B2");
    }

    @Override
    public void buildPart3() {
        product.setPart3("B3");
    }

    @Override
    public Product getResout() {
        return product;
    }
}

package com.boot.lijunhao.builder;

/**
 * Created by lijunhao on 2017/8/17.
 */
public class Start {

    public static void main(String[] args) {
        //指挥官,用来指挥要创建什么
        Director director = new Director();
        //要创建的产品A
        ProductA productA = new ProductA();
        //要创建的产品B
        ProductB productB = new ProductB();
        //指挥官开始用构造1创建产品A
        director.Contruct(productA);
        //指挥官创建产品A后的结果
        Product resout = productA.getResout();
        String sa = resout.toString();
        System.out.println(sa);
        //指挥官开始用构造2的方法创建产品B
        director.Contruct2(productB);
        //指挥官创建产品A后的结果
        Product resoutB = productB.getResout();
        String sb = resoutB.toString();
        System.out.println(sb);
    }
}

结果:

Product(part1=A1, part2=A2, part3=A3)
Product(part1=B1, part2=null, part3=null)

Process finished with exit code 0

© 著作权归作者所有

上一篇: 设计原则
月夜筱风
粉丝 0
博文 55
码字总数 19574
作品 0
闵行
程序员
私信 提问
设计模式(Swift) - 3.观察者模式、建造者模式

上一篇 设计模式(Swift) - 2.单例模式、备忘录模式和策略模式中讲了三种常见的设计模式. 单例模式: 限制了类的实例化,一个类只能实例化一个对象,所有对单例对象的引用都是指向了同一个对象....

Dariel
2018/07/01
0
0
设计模式8——Builder设计模式

Builder建造者模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就...

小米米儿小
2013/12/11
198
0
那些你不经意间使用的设计模式(一) - 创建型

前言 前几天我曾分享过几张不那么严谨的思维导图,其中便有关于设计模式的一张: 在很长的一段时间里,我只能记住某几种设计模式,并没有很好的应用。 索性我们就以该图为大纲,讲讲那些我们...

前端劝退师
07/23
0
0
java设计模式-- 单例模式

在很久之前,也就是在大二暑假的时候,那时候看马士兵的视频教程中有提到很多的设计模式。 java的设计模式大致可以分为3大类,23种设计模式。 其中,创建型模式有5种:单例模式、建造者模式、...

爱学习的逃课君
2014/11/27
137
0
JavaScript设计模式系列二之建造者模式(附案例源码)

文章初衷 设计模式其实旨在解决语言本身存在的缺陷, 目前javaScript一些新的语法特性已经集成了一些设计模式的实现, 大家在写代码的时候,没必要为了用设计模式而去用设计模式, 那么我这边为什...

小钱钱阿圣
2017/09/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

关于AsyncTask的onPostExcute方法是否会在Activity重建过程中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XG1057415595/article/details/86774575 假设下面一种情况...

shzwork
今天
6
0
object 类中有哪些方法?

getClass(): 获取运行时类的对象 equals():判断其他对象是否与此对象相等 hashcode():返回该对象的哈希码值 toString():返回该对象的字符串表示 clone(): 创建并返此对象的一个副本 wait...

happywe
今天
6
0
Docker容器实战(七) - 容器中进程视野下的文件系统

前两文中,讲了Linux容器最基础的两种技术 Namespace 作用是“隔离”,它让应用进程只能看到该Namespace内的“世界” Cgroups 作用是“限制”,它给这个“世界”围上了一圈看不见的墙 这么一...

JavaEdge
今天
8
0
文件访问和共享的方法介绍

在上一篇文章中,你了解到文件有三个不同的权限集。拥有该文件的用户有一个集合,拥有该文件的组的成员有一个集合,然后最终一个集合适用于其他所有人。在长列表(ls -l)中这些权限使用符号...

老孟的Linux私房菜
今天
7
0
面试套路题目

作者:抱紧超越小姐姐 链接:https://www.nowcoder.com/discuss/309292?type=3 来源:牛客网 面试时候的潜台词 抱紧超越小姐姐 编辑于 2019-10-15 16:14:56APP内打开赞 3 | 收藏 4 | 回复24 ...

MtrS
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部