|
副标题[/!--empirenews.page--]
1.关于Builder模式Builder模式是一种广泛使用的设计模式,在设计模式中,对其的解释大致为:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。应用场景在以下情况使用Build模式:当创建复杂对象的...
1.关于Builder模式Builder模式是一种广泛使用的设计模式,在设计模式中,对其的解释大致为:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 应用场景在以下情况使用Build模式: 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。 当构造过程必须允许被构造的对象有不同的表示时。
Builder模式要解决的也正是这样的问题: - 当我们要创建的对象很复杂的时候(通常是由很多其他的对象组合而成)
- 我们要复杂对象的创建过程和这个对象的表示(展示)分离开来。
这样做的好处就是通过一步步的进行复杂对象的构建,由于在每一步的构造过程中可以引入参数,使得经过相同的步骤创建最后得到的对象的展示不一样。 2.Builder模式在Java中的简析在Java中常见的Builder模式大致有4个参与者,分别为: - Product:待被构造的复杂对象;
- Builder:抽象接口,用于创建Product的各个组成部分;
- ConcreteBuilder:Builder接口的具体实现;
- Director:Builder接口的使用者
代码示例Product类 public class AppInfo { private String name; private int versionCode; private String versionName; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getVersionCode() { return versionCode; } public void setVersionCode(int versionCode) { this.versionCode = versionCode; } public String getVersionName() { return versionName; } public void setVersionName(String versionName) { this.versionName = versionName; } }
Builder接口 public interface Builder { public void builderName(String name); public void builderVersionCode(int versionCode); public void builderVersionName(String versionName); public AppInfo getAppInfo(); }
Builder接口的具体实现 public class AppInfoBuilder implements Builder { AppInfo appInfo; public AppInfoBuilder() { appInfo = new AppInfo(); } @Override public AppInfo getAppInfo() { return appInfo; } @Override public void builderName(String name) { appInfo.setName(name); } @Override public void builderVersionCode(int versionCode) { appInfo.setVersionCode(versionCode); } @Override public void builderVersionName(String versionName) { appInfo.setVersionName(versionName); } }
Builder接口的使用者 public class AppInfoDirector { private Builder builder; public AppInfoDirector(Builder builder) { this.builder = builder; } public void builderAppInfo(String name, int versionCode, String versionName) { builder.builderName(name); builder.builderVersionCode(versionCode); builder.builderVersionName(versionName); } public AppInfo getAppInfo() { return builder.getAppInfo(); } }
到此为止大致就是在Java中使用Builder模式的流程。在开发中,具体的使用方式会因开发人员对该模式的理解产生些许变化。下面则将重点介绍如何在android中使用Builder模式。 3.android下的Builder模式Java中的Builder模式重点在于抽象出对象创建的步骤,并通过调用不同的具体实现从而得到不同的结果,而android下Builder模式的目的在于减少对象创建过程中的多个重载构造函数、可选参数以及由setter方法过度使用而导致的不必要的复杂性。下面我们将先简单看下android官方提供的代码示例,然后在已一个简单对象(AppInfo)为列进行分析。 官方示例AlertDialog alertDialog = new AlertDialog.Builder(this).setTitle("title") .setMessage("message") .setCancelable(false) .setPositiveButton( "positiveButton", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } } ) .setNegativeButton( "negativeButton", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } } ) .create(); alertDialog.show();
可以看出在创建AlertDialog对象时,使用的就是Builder模式,整个创建过程非常的简洁,下面我们则将对AppInfo对象进行改造,使其支持类似的Builder模式。 改造AppInfo对象public class AppInfo { private final String name;//必填字段 private int versionCode; private String versionName; private String desption; private String author; private String company; private AppInfo(Builder builder) { //通过Builder进行赋值 name = builder.name; versionCode = builder.versionCode; versionName = builder.versionName; desption = builder.desption; author = builder.author; company = builder.company; } public String getName() { return name; } public int getVersionCode() { return versionCode; } public String getVersionName() { return versionName; } public String getDesption() { return desption; } public String getAuthor() { return author; } public String getCompany() { return company; } @Override public String toString() { return "AppInfo{" + "name='" + name + ''' + ", versimock=" + versionCode + ", versimock='" + versionName + ''' + ", desption='" + desption + ''' + ", author='" + author + ''' + ", company='" + company + ''' + '}'; } public static final class Builder { private final String name; private int versionCode; private String versionName; private String desption; private String author; private String company; public Builder(String val) { //必填字段通过构造函数进行赋值 name = val; } public Builder versionCode(int val) { versionCode = val; return this; } public Builder versionName(String val) { versionName = val; return this; } public Builder desption(String val) { desption = val; return this; } public Builder author(String val) { author = val; return this; } public Builder company(String val) { company = val; return this; } public AppInfo build() { return new AppInfo(this); } } }
(编辑:无忧刷机网 - 51刷机网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|