不知道你是否和我一样有代码洁癖,不知道你是否和我一样有同种类型的代码洁癖.
下面描述一下我的症状,当我看见有完全相同的调用逻辑时,总有一种难以言表的不适,有一种强烈的,想把重复的逻辑抹去的冲动.
最初是怎么解决的呢?
比如说这样一个类
public class TestBean {
String messageA;
String messageB;
public String getMessageA() {
return messageA;
}
public void setMessageA(String messageA) {
this.messageA = messageA;
}
public TestBean(String messageA, String messageB) {
this.messageA = messageA;
this.messageB = messageB;
}
public String getMessageB() {
return messageB;
}
public void setMessageB(String messageB) {
this.messageB = messageB;
}
}
如果我需要调用他的方法逻辑的时候,只能通过这样的方式
private void test() {
this.setMessageA("A");
this.setMessageB("B");
}
一般人感觉很正常,这不就是面向对象的基本数据操作方式吗,很简单啊,也很正常,没有违和感啊.
但是你有没有觉得这样还是很废话吗?我知道java的特点之一就是易上手,但是同时,易上手的含义就是包含了很多为了让人更好入门的重复逻辑和方法,或者说是表达方式和字段
我理想中的语言是一切信息只出现过一次即可,不需要进行重复暗示,这才是计算机,这才是智能不是吗?好了,扯远了,回过来看看我们今天的主题.
最开始我想到的方法是函数式编程,看看能不能简单一些,但是当我知道了RxJava,才发现其实有人已经玩过这条路了,而且玩的很不错.基本的操作是不断地在其实doOnNext方法中去执行对操作对象的操作.
具体的操作方式是这样的,OK...实例化对象的确消失了,但是引入了更长的方法名和形参,捡了芝麻丢了西瓜,得不偿失,就没有一点意思了.
private void test1() {
Flowable.just(1)
.doOnNext(integer -> {
}).doOnNext(integer -> {});
}
那么,有没有一种方法能够实现这样的效果呢?或者说能平息我的洁癖症的方法到底是什么呢?经过一番思索我想到了.可能是因为最近在看android插件化的适配问题,这给了我一些灵感吧
首先是思路,通过建造者模式,因为这个模式相当顺滑,其次是能实现链式调用的效果.
先给出效果,在后续的文章中我再给出实际的实现方式.当然,你会说,我吃了空啊,等你的Builder类代码写完,天都黑了!我还是乖乖地多写几个字母都比写这种样式好.
好吧,如果你这么觉得,我不建议你看下去,勤奋的程序员啊,真的建议你学会偷懒.只有懂得节约才能更好地挥霍,这个道理浅显易懂.
@BuilderClass
public class TestA {
int a;
int b;
public static void main(String[] arg) {
TestA testA = new TestA(1, 2);
testA.subBuilder()
.setA(2)
.setB(4);
}
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
public TestA(int a, int b) {
this.a = a;
this.b = b;
}
public SubTestA subBuilder() {
return SubTestA.__create(this);
}
}
的确,这样的方式的确很傻,那么有没有方法能解决这个问题呢?
当然有啦,不然我写这个文章不是浪费大家时间呢= =