Java学习-设计模式-建造者模式

61 篇文章 0 订阅
48 篇文章 1 订阅

Java学习-设计模式-建造者模式

概念

**建造者模式(Builder Pattern) ** 又名生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。

**建造者模式 ** 是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。

**建造者模式可以将部件和其组装过程分开,一步一步创建一个复杂的对象。用户只需要指定复杂对象的类型就可以得到该对象,而无须知道其内部的具体构造细节. **

理解:

这玩意怎么说呢,

​ 我们创建对象时,很多时候需要对对象里面的参数(属性)赋值,如果新建的对象属性很多,我们每次都需要重复的去给新建的对象赋值,这很麻烦,建造者模式就是新建一个类,将那个很多属性的类的属性值放在这个类中,每次新建一个对象,就使用这个新建的类去给新对象赋值,不用自己去set属性值。

​ 还比如说,我们新建一个对象,给这个对象属性赋值的时候存在一定的规则,为了避免在某一次新建对象的时候出错,我们可以把这个赋值时候的规则(或者说顺序、条件等)放到一个类中,然后在新建的对象的时候,调用这个类中的赋值方法给新对象赋值,只要新建的类没有问题,这样就一定不会出错。

举例:

创建一个 “女朋友”

package Practices.Mode.Builder_Pattern;
// 1. 首先需要创建一个“女朋友”类
// 定义其属性:比如姓名、年龄、身体、智商等等
// 为了说明建造者模式的作用,勉强定义这样一个规则:定义“女朋友”姓名、年龄和智商之前,先得让“女朋友出生”
public class GirlFriend {
    private String body;    // 身体属性
    private String name;    // 名字
    private String age;     // 年龄
    private String IQ;      // IQ

    // 四个属性的get和set方法
    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }

    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 getIQ() {
        return IQ;
    }

    public void setIQ(String IQ) {
        this.IQ = IQ;
    }

    @Override
    public String toString() {
        return "GirlFriend{" +
                "body='" + body + '\'' +
                ", name='" + name + '\'' +
                ", age='" + age + '\'' +
                ", IQ='" + IQ + '\'' +
                '}';
    }
}
package Practices.Mode.Builder_Pattern;
//  2. 创建一个建造“女朋友”的接口
// 在这个节口中,需要给“女朋友”的属性赋值,还要有一个创建女朋友的方法
// 为什么要定义一个这样的接口,我们创建对象的时候斌可能只创建一种类型,或者说只创建属性一致的对象。
public interface Builder_GirlFriend {
    public void buildBody();
    public void buildname();
    public void buildBage();
    public void buildIQ();
    public GirlFriend CreateGirl();
}
package Practices.Mode.Builder_Pattern;
// 3. 创建一个类去实现之前的接口,这个类中决定一套GirlFriend的标准,可以再定义其他的实现类,然后在实现另一套标准
public class SmartGirlFriend implements Builder_GirlFriend {
    public GirlFriend smartGirl;

    public SmartGirlFriend(){
        smartGirl = new GirlFriend();
    }

    public void buildBody() {
        smartGirl.setBody("正常人的身材");
    }

    public void buildname() {
        smartGirl.setName("小红");
    }

    public void buildBage() {
        smartGirl.setAge("22");
    }

    public void buildIQ() {
        smartGirl.setIQ("180");
    }

    public GirlFriend CreateGirl() {
        return smartGirl;
    }
}
package Practices.Mode.Builder_Pattern;
// 4, 重点来了,敲了好久,一定要写这句话
// 刚刚说了那么多,也可以创建一种对象了,但是这个Director 类就是我们决定创建时候规则的地方
public class Director {
    // 这个创建方法的入参就是之前的接口,可以根据实现类的不同,从而实现创建不同属性的对象。
    // 我觉得这里可以在创建多个方法,以实现不同的规则
    public GirlFriend CreateGirlFriendByDirector(Builder_GirlFriend gf){
        // 之前的规则:定义“女朋友”姓名、年龄和智商之前,先得让“女朋友出生”
        // 所以我们先创建“她”的身体
        gf.buildBody();
        // 其次赋给“她”其他属性
        gf.buildname();
        gf.buildBage();
        gf.buildIQ();
        return gf.CreateGirl();
    }
}
package Practices.Mode.Builder_Pattern;
//5. 测试
public class test_main {
    public static void main(String[] args) {
        Director director = new Director();
        GirlFriend girlFriend = director.CreateGirlFriendByDirector(new SmartGirlFriend());
        System.out.println(girlFriend.toString());
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值