Android设计模式--Builder模式
2016-06-20 12:03
501 查看
假设我们有一个Dog类,我们通过Dog类来创建很多的Dog,并且这个Dog有很多属性,如:name,sex,age,weight并且允许这些属性可以设置为null
然而在别人也需要使用第四个构造函数Dog dog = Dog(“wangcai”, male, 9, 20);时,别人单纯的从构造方法很难看出各个参数是何种含义,此时需要打开构造函数看看才知道,当我们在此方法中增加一个静态的内部类Builder,并修改Dog的构造方法,此时代码的可读性就会提升很多。
从代码中可以看出Dog的成员变量和Builder的成员变量一模一样,并且我们在Dog的构造中传入的是Builder对象,把Builder中的成员变量赋值给Dog中的成员变量,Builder类通过一系列的方法用于成员变量的赋值,并返回当前对象本身(this),另外通过在Builder类中创建一个build方法或create返回Dog类对象。
因此我们可以在创建Dog对象时可以这样了:
Dog.Builder builder= new Dog.Builder();
Dog dog = builder.name(“wangcai”)
.sex(“male”)
.age(9)
.weight(20)
.build();
public class Dog { private String name; private String sex; private int age; private float weight; public Dog() { super(); // TODO Auto-generated constructor stub } public Dog(String name) { super(); this.name = name; } public Dog(String name, String sex) { super(); this.name = name; this.sex = sex; } public Dog(String name, String sex, int age) { super(); this.name = name; this.sex = sex; this.age = age; } public Dog(String name, String sex, int age, float weight) { super(); this.name = name; this.sex = sex; this.age = age; this.weight = weight; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public float getWeight() { return weight; } public void setWeight(float weight) { this.weight = weight; } }
然而在别人也需要使用第四个构造函数Dog dog = Dog(“wangcai”, male, 9, 20);时,别人单纯的从构造方法很难看出各个参数是何种含义,此时需要打开构造函数看看才知道,当我们在此方法中增加一个静态的内部类Builder,并修改Dog的构造方法,此时代码的可读性就会提升很多。
public class Dog { private String name; private String sex; private int age; private float weight; private Dog(Builder builder) { super(); this.name = builder.name; this.sex = builder.sex; this.age = builder.age; this.weight = builder.weight; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public float getWeight() { return weight; } public void setWeight(float weight) { this.weight = weight; } //创建一个Builder的静态类 static class Builder{ private String name; private String sex; private int age; private float weight; public Builder name(String name){ this.name = name; return this; } public Builder sex(String sex){ this.sex = sex; return this; } public Builder age(int age){ this.age = age; return this; } public Builder weight(float weight){ this.weight = weight; return this; } public Dog build(){ return new Dog(); } } }
从代码中可以看出Dog的成员变量和Builder的成员变量一模一样,并且我们在Dog的构造中传入的是Builder对象,把Builder中的成员变量赋值给Dog中的成员变量,Builder类通过一系列的方法用于成员变量的赋值,并返回当前对象本身(this),另外通过在Builder类中创建一个build方法或create返回Dog类对象。
因此我们可以在创建Dog对象时可以这样了:
Dog.Builder builder= new Dog.Builder();
Dog dog = builder.name(“wangcai”)
.sex(“male”)
.age(9)
.weight(20)
.build();
相关文章推荐
- Android 系统截屏与系统内置DVR录像冲突,导致SystemUI重启的问题解决与分享
- 获取当前路径 ${pageContext.request.contextPath}
- SAP GUI740 PATCH8 下载
- UILabel行数间隔
- 错误 bpbrm(PID=7552) 从客户端 - Script exited with status = 1 <the requested operat
- UIScrollViewDelegate
- UIScrollView 性能优化 - view转为Image
- 357. Count Numbers with Unique Digits
- Android酷炫实用的开源框架(UI框架)
- return true 的应用(判断三个块相连)和块的存储
- request 访问路径地址
- iOS解决UIcollectionView添加手势后不响应其cell的问题
- iOS流布局UICollectionView系列一——初识与简单使用UICollectionView
- RESTEasy:@FormParam、@PathParam、@QueryParam、@HeaderParam、@CookieParam、@MatrixParam说明
- LinkedBlockingQueue 与ConcurrentLinkedQueue队列的不同与同
- iOS-UIButton 全面解析
- UIStackView的演练-学习
- 网摘:漫谈law、equity、act、statute、code、bill等法律英语词汇
- APIs — A Strategy Guide】系列之二 把API作为你的商业策略
- leetcode_357 Count Numbers with Unique Digits