
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
6.4 违背设计模式实现
没有if…else解决不了的逻辑,不行就再加一行!
这里先使用不加设计的方式实现功能,之后再通过设计模式优化完善。一般使用这种实现方式的代码都会集中在一个类中,里面包含大量的if…else逻辑。既不具有复杂的代码结构,也不具有良好的扩展性。如果应对非常简单的业务,还是可以使用的。
6.4.1 工程结构

对于装修包的类DecorationPackageController,按照一个类里有多个if…else代码的方式实现。
6.4.2 if…else实现需求



首先,这段代码要解决的问题是接收入参:房屋面积(area)、装修等级(level),根据不同类型的装修等级选择不同的材料。其次,在实现过程中可以看到每一段if代码块中包含着不同的材料(吊顶为二级顶;涂料为立邦;地砖为马可波罗),最终生成装修清单和装修价格。最后,提供获取装修详细信息的方法,返回给调用方,便于客户了解装修清单。
6.4.3 测试验证
接下来,通过JUnit单元测试的方式验证接口服务。
1.单元测试

2.测试结果


看到输出的结果,已经有装修公司提供的报价单的感觉了。虽然以上这段使用if…else方式实现的代码可以满足些许功能,但随着公司业务的快速发展,会针对不同的户型提供更多的套餐。这段实现代码将迅速扩增到几千行,甚至不断地修改,最终难以维护。