• Builder 模式初探


    Builder 模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细的控制对象的构造流程。该模式是为了将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的表示隔离开来,两者之间的耦合。

    使用场景:

    1.相同的方法,不同的执行顺序,产生不同的事件结果。(View的封装,对外暴露的方法不同)
    2.初始化一个对象特别复杂,如参数特别多且很多都具有默认参数时

    示例代码:

    public class BuilderTest {
    
    	private final int servingSize;
    	private final int servings;
    	private final int calories;
    	private final int fat;
    	private final int sodium;
    	private final int carbohydrate;
    
    	public static class Builder {
    		// Required parameters
    		private final int servingSize;
    		private final int servings;
    
    		// Optional parameters - initialized to default values
    		private int calories = 0;
    		private int fat = 0;
    		private int sodium = 0;
    		private int carbohydrate = 0;
    
    		public Builder(int servingSize, int servings) {
    			this.servingSize = servingSize;
    			this.servings = servings;
    		}
    
    		public Builder calories(int val) {
    			calories = val;
    			return this;
    		}
    
    		public Builder fat(int val) {
    			fat = val;
    			return this;
    		}
    
    		public Builder sodium(int val) {
    			sodium = val;
    			return this;
    		}
    
    		public Builder carbohydrate(int val) {
    			carbohydrate = val;
    			return this;
    		}
    
    		public BuilderTest build() {
    			return new BuilderTest(this);
    		}
    	}
    
    	private BuilderTest(Builder builder) {
    		servingSize = builder.servingSize;
    		servings = builder.servings;
    		calories = builder.calories;
    		fat = builder.fat;
    		sodium = builder.sodium;
    		carbohydrate = builder.carbohydrate;
    	}
    
    	public static void main(String[] args) {
    		BuilderTest cocaCola = new BuilderTest.Builder(240, 8)
    				.calories(100).sodium(35).carbohydrate(27).build();
    	}
    }
    

    IntelliJ IDEA 快速生成 Builder 样板代码

    在 IntelliJ IDEA Plugin 库中有一个名叫 Builder Generator 的插件,该插件可以像生成 Getting/Setting 一样对当前类生成 Builder 样板代码。

    本文由个人 hexo 博客 co2fe.com 迁移
    date: 2018-09-18 15:13:06

  • 相关阅读:
    读取web.xml中设置的参数
    在服务端中,读取properties资源文件中的数据
    window下,nodejs安装http-server,并开启HTTP服务器
    跨域请求资源的方式
    IView 给Submenu增加click事件失效解决方案
    Vue -- mounted方法中调用methods的方法(并取出mounted方法中回调函数的值)
    IView 使用Table组件时实现给某一列添加click事件
    物联网协议CoAP协议学习
    电脑操作
    物联网协议
  • 原文地址:https://www.cnblogs.com/manastudent/p/10191037.html
Copyright © 2020-2023  润新知