打字猴:1.700454333e+09
1700454333
1700454334 userBiz.deleteUser();
1700454335
1700454336 ……
1700454337
1700454338 确实可以如此,问题也解决了,但是我们来分析一下刚才的动作,为什么要把一个接口拆分成两个呢?其实,在实际的使用中,我们更倾向于使用两个不同的类或接口:一个是IUserBO,一个是IUserBiz,类图如图1-3所示。
1700454339
1700454340 以上我们把一个接口拆分成两个接口的动作,就是依赖了单一职责原则,那什么是单一职责原则呢?单一职责原则的定义是:应该有且仅有一个原因引起类的变更。
1700454341
1700454342
1700454343
1700454344
1700454345 图1-3 项目中经常采用的SRP类图
1700454346
1700454347
1700454348
1700454349
1700454350 设计模式之禅 [:1700453904]
1700454351 设计模式之禅 1.2 绝杀技,打破你的传统思维
1700454352
1700454353 解释到这里,估计你已经很不屑了,“切!这么简单的东西还要讲?!”好,我们来讲点复杂的。SRP的原话解释是:
1700454354
1700454355 There should never be more than one reason for a class to change.
1700454356
1700454357 这句话初中生都能看懂,不多说,但是看懂是一码事,实施就是另外一码事了。上面讲的例子很好理解,在实际项目中大家都已经这么做了,那我们再来看看下面这个例子是否好理解。电话这玩意,是现代人都离不了,电话通话的时候有4个过程发生:拨号、通话、回应、挂机,那我们写一个接口,其类图如图1-4所示。
1700454358
1700454359
1700454360
1700454361
1700454362 图1-4 电话类图
1700454363
1700454364 我不是有意要冒犯IPhone的,同名纯属巧合,我们来看一个这个过程的代码,如代码清单1-2所示。
1700454365
1700454366 代码清单1-2 电话过程
1700454367
1700454368 public interface IPhone{
1700454369
1700454370 //拨通电话
1700454371
1700454372 public void dial(String phoneNumber);
1700454373
1700454374 //通话
1700454375
1700454376 public void chat(Object o);
1700454377
1700454378 //通话完毕,挂电话
1700454379
1700454380 public void hangup();
1700454381
1700454382 }
[ 上一页 ]  [ :1.700454333e+09 ]  [ 下一页 ]