Builder模式学习

Builder模式也属于链式模式的一部分,我为什么想学这种模式呢?主要是因为最近在看第三方图片缓存的Glide的源码。

Glide.with(this).load(url).into(image);

这就是Glide最简单的用法了,你可以不挺的点点点,然后实现不同的效果,那这种设计模式怎么实现的呢?其实说难不难。

下面就是一个简单的实现:

public class Person {
StringBuffer buffer=new StringBuffer();
public Person addColor(String color) {
buffer.append("穿了一件"+color+"的衣服");
return this;
}
public Person addName(String name) {
buffer.append("姓名"+name);
return this;
}
public Person addAge(int age) {
buffer.append("年龄:"+age);
return this;
}
public void show() {
System.out.println(buffer.toString());
}
}

每个方法只需要返回本类就好了。调用的时候就可以

public static void main(String [] args) {
Person person=new Person();
person.addName("xiaoming").addAge(1).addColor("红色").show();
}

有人说这种根本不能体现会了,那么用以下这个代码可以证明吗?

首先先定义一个对象,可以对这个对象进行操作

public class Person {
private String name;
private int age;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}

其次定义一个接口,里面所有返回值都需要返回接口本身

public interface IPerson {
IPerson loadName(String mane);
IPerson loadAge(int age);
IPerson laodAddress(String address);
IPerson show();
}

第三有一个build类实现这个接口类:

public class Student implements IPerson{
private Person person=new Person();
@Override
public IPerson loadName(String name) {
// TODO Auto-generated method stub
person.setName(name);
return this;
}
@Override
public IPerson loadAge(int age) {
// TODO Auto-generated method stub
person.setAge(age);
return this;
}
@Override
public IPerson laodAddress(String address) {
// TODO Auto-generated method stub
person.setAddress(address);
return this;
}

public IPerson show() {
System.out.println("姓名:"+person.getName()+"年龄:"+person.getAge()+"地址:"+person.getAddress());
return this;
}
}

最后在使用的时候就可以自由的点点点了:

public static void main(String [] args) {
Student student=new Student();
student.loadName("xiaoming").loadAge(1).show();
}


如果想要复杂点还可以在show的方法里进行判断,如果为null就不调用set方法或者别的内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值