基础设计模式-04 复杂对象创建的建造器模式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了基础设计模式-04 复杂对象创建的建造器模式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3330字,纯文字阅读大概需要5分钟。
内容图文
此篇博客,更换格式为MarkDown,请查看:https://www.cnblogs.com/perferect/p/13296581.html
????现在很多人都在用lombok,通过注解就可以简化代码,省略我们好多工作。但是其中有两个注解对于我们创建对象非常好用,一个是@Builder,一个是@Access;
????主要是学习一下@Builder这个注解所涉及到的设计模式;
1.Java框架中常见的建造器模式
1.mybatis获取sqlsession
SqlSession sqlSession = new SqlSessionFactoryBuilder()
.build(new FileInputStream(new File("/mapper/test.xml")))
.openSession();
2.封装controller返回信息
@Data
public class ResultObj {
private Object result;
private String message;
private Integer code;
private ResultObj(Object result,String message,Integer code){
this.result = result;
this.message = message;
this.code = code;
}
public static ResultObj successObj(Object obj){
return successObj(obj,StatusEnum.SUCCESS.getMessage());
}
public static ResultObj successObj(Object obj,String message){
return new ResultObj(obj,message, StatusEnum.SUCCESS.getCode());
}
public static ResultObj failObj(){
return failObj(StatusEnum.FAIL.getMessage());
}
public static ResultObj failObj(String message){
return failObj(null,message);
}
public static ResultObj failObj(Object result,String message){
return new ResultObj(result,message,StatusEnum.FAIL.getCode());
}
}
2.什么是构造器模式以及建造器模式的好处
2.1 什么是构造器模式
将一个复杂对象的构建与它的表示分离,使得同样的建造过程可以建造不同的表示;(一句话总结,就是建对象呗,不过对象里面的参数比较多复杂)
2.2 建造器模式的UML图
2.3 建造器模式的优点及不足
????首先,我们一般创建对象的方法有两种:1.构造器创建;2.通过属性set方法创建;
构造器创建对象:
class A{
private String a;
private String b;
private String c ;
A(){}
A(String a){
this.a = a;
}
A(String a,String b){
this.a = a;
this.b = b;
}
A(String a,String b,String c){
this.a = a;
this.b = b;
this.c = c ;
}
}
set方式创建对象
class B{
private String a;
B(){}
public void setA(){
this.a = a
}
public String getA(){
return this.a ;
}
}
分析一下上面两种方式存在的问题:
- 1. 构造器创建对象,多个属性的话,必须严格按照顺序注入;set方法不存在这种问题;
- 2.构造器创建对象,可读性差,如果对象中有多个属性赋值 ,必须清楚每个属性参数位置;set方法不存在这种问题;
- 3.set方法创建对象,对象在使用过程中,容易被错修改;
根据上面可知,当复杂对象创建时,构造器方法可读性很差,且属性传参不方便,set方法创建对象在使用过程中可能出现误操作的缺点;
建造器模式完美的解决了上面的两种问题;
3.建造器模式的使用
通过创建builder接口,或者内置静态成员类,来创建构造器;
public class NutritionFacts {
private final int serversize;
private final int servers;
private final int calorizes;
private final int fat;
private final int sodium;
private final int carbohydrate;
static class Builder{
//必填项
private final int serversize;
private final int servers;
//选填项
private int calorizes;
private int fat;
private int sodium;
private int carbohydrate;
public Builder(int serversize,int servers){
this.serversize = serversize;
this.servers = serversize;
}
public Builder calorizes(int calorizes){
this.calorizes = calorizes;
return this;
}
public Builder fat(int fat){
this.fat = fat;
return this;
}
public Builder sodium(int sodium){
this.sodium = sodium;
return this;
}
public Builder carbohydrate(int carbohydrate){
this.carbohydrate = carbohydrate;
return this;
}
//增加一个创建对象的build
public NutritionFacts build(){
return new NutritionFacts(this);
}
}
public NutritionFacts(Builder builder){
this.serversize = builder.serversize;
this.servers = builder.servers;
this.calorizes = builder.calorizes;
this.fat = builder.fat;
this.sodium = builder.sodium;
this.carbohydrate = builder.carbohydrate;
}
}
4.除了建造器模式,普通对象创建的简易方法
上面说了lombok还提供了 @Access注解,这个注解的原理比较简单,就是将传统的set方法变成静态,返回当前对象;
class A{
private String name;
public static A setName(String name){
this.name = name;
return this;
}
}
以上就是对构造器模式的简单介绍。
原文:https://www.cnblogs.com/perferect/p/13296581.html
内容总结
以上是互联网集市为您收集整理的基础设计模式-04 复杂对象创建的建造器模式全部内容,希望文章能够帮你解决基础设计模式-04 复杂对象创建的建造器模式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。