JAVA设计模式之Builder模式
2017-06-27 11:25
411 查看
1.1 Builder模式介绍
Builder我在网上看了很多帖子但是并没有详细的讲解 , 基本都是说使得构建过程和表示隔离开 , 其实你如果光看代码的话我是不建议的 , 好了废话不多说下面进入主题
1.2 Builder模式的定义
将一个复杂对象的构造与它的表示分离(我理解是:说白了就是不在构造方法里面设置参数 , 换一种体现形式 , 让构建过程和部件都可以自由的扩展) , 使同样的构造过程可以创建不同的表示,
1.3 Builder模式的简单实现
我们平常写个Javabean一般可能会这样写
使用 :
下面给大家介绍Builder形式
使用 :
可见各大框架中大量的运用了Builder模式。最后总结一下
定义一个静态内部类Builder,内部的成员变量和外部类一样
Builder类通过一系列的方法用于成员变量的赋值,并返回当前对象本身(this)
Builder类提供一个build方法或者create方法用于创建对应的外部类,该方法内部调用了外部类的一个私有构造函数,该构造函数的参数就是内部类Builder
外部类提供一个私有构造函数供内部类调用,在该构造函数中完成成员变量的赋值,取值为Builder对象中对应的值
是不是看的简单明了啊 , 一行代码搞定!
其实有很多种表现形式 , 这个只是一个简单的例子,比如 AlertDialog , OkHttp等等都是用了Builder 如果有不对的地方请大家指出谢谢 !
Builder我在网上看了很多帖子但是并没有详细的讲解 , 基本都是说使得构建过程和表示隔离开 , 其实你如果光看代码的话我是不建议的 , 好了废话不多说下面进入主题
1.2 Builder模式的定义
将一个复杂对象的构造与它的表示分离(我理解是:说白了就是不在构造方法里面设置参数 , 换一种体现形式 , 让构建过程和部件都可以自由的扩展) , 使同样的构造过程可以创建不同的表示,
1.3 Builder模式的简单实现
我们平常写个Javabean一般可能会这样写
package com.example.liangshaoteng.imageloader; /** * Created by liangshaoteng on 17-6-27. */ public class Persion { private String name; private int age; private int height; 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 int getHeight() { return height; } public void setHeight(int height) { this.height = height; } @Override public String toString() { return "Persion{" + "name='" + name + '\'' + ", age=" + age + ", height=" + height + '}'; } }
使用 :
package com.example.liangshaoteng.imageloader; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.widget.Toast; import com.example.liangshaoteng.imageloader.bean.Builder; import com.example.liangshaoteng.imageloader.bean.Director; import com.example.liangshaoteng.imageloader.bean.MacBookBuilder; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Persion persion = new Persion(); persion.setName("小明"); persion.setAge(18); persion.setHeight(178); Toast.makeText(getApplicationContext(), "persion : " + persion.toString(), Toast.LENGTH_LONG).show(); } }但是我们用的时候是不是感觉太麻烦了吗
下面给大家介绍Builder形式
package com.example.liangshaoteng.imageloader; /** * Created by liangshaoteng on 17-6-27. */ public class Persion { private String name; private int age; private int height; Persion(builder builder) { this.name = builder.name; this.age = builder.age; this.height = builder.height; } 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 int getHeight() { return height; } public void setHeight(int height) { this.height = height; } @Override public String toString() { return "Persion{" + "name='" + name + '\'' + ", age=" + age + ", height=" + height + '}'; } static class builder { public String name; public int age; public int height; public builder name(String name) { this.name = name; return this; } public builder age(int age) { this.age = age; return this; } public builder height(int height) { this.height = height; return this; } public Persion build() { return new Persion(this); } } }
使用 :
package com.example.liangshaoteng.imageloader; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.widget.Toast; import com.example.liangshaoteng.imageloader.bean.Builder; import com.example.liangshaoteng.imageloader.bean.Director; import com.example.liangshaoteng.imageloader.bean.MacBookBuilder; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Persion.builder builder = new Persion.builder(); Persion persion = builder .name("小明") .age(18) .height(178) .build(); Toast.makeText(getApplicationContext(), "persion : " + persion.toString(), Toast.LENGTH_LONG).show(); } }
可见各大框架中大量的运用了Builder模式。最后总结一下
定义一个静态内部类Builder,内部的成员变量和外部类一样
Builder类通过一系列的方法用于成员变量的赋值,并返回当前对象本身(this)
Builder类提供一个build方法或者create方法用于创建对应的外部类,该方法内部调用了外部类的一个私有构造函数,该构造函数的参数就是内部类Builder
外部类提供一个私有构造函数供内部类调用,在该构造函数中完成成员变量的赋值,取值为Builder对象中对应的值
是不是看的简单明了啊 , 一行代码搞定!
其实有很多种表现形式 , 这个只是一个简单的例子,比如 AlertDialog , OkHttp等等都是用了Builder 如果有不对的地方请大家指出谢谢 !
相关文章推荐
- 用Java实现的设计模式系列(3)--Builder
- Java设计模式—Builder
- java设计模式 之生成器模式 Builder
- Java:设计模式之Builder
- 设计模式(三)----- 建造者模式(Builder)----(JAVA版)
- Java设计模式-----Builder建造者模式
- java设计模式--Builder设计模式
- java 设计模式学习笔记三 Builder模式
- JAVA设计模式四---Builder(建造者模式)
- JAVA设计模式 — 生成器模式(Builder)
- Java设计模式之Builder Pattern
- java23种设计模式之建造者模式(Builder)
- java设计模式---builder---构造器
- java 设计模式学习笔记三 Builder模式
- java设计模式学习4--Builder Pattern[原创]
- 5.23种设计模式的Java版--Builder (建造)
- Java设计模式-----Builder建造者模式
- 设计模式之—建造者模式(Builder)-Java实现
- java设计模式之Builder(转存)
- Java设计模式三:建造者模式(Builder Pattern)