四、单一职责原则代码示例 ( 接口的单一职责 )
1、反面示例
该 IGood 接口负责两大块职责 , 获取商品信息 获取 名称 / 价格 , 管理商品 购买 / 退款 ;
这个接口设计 , 违背了单一职责原则 ;
package singleresponsibility; /** * 该接口负责两大块职责 * 获取商品信息 获取 名称 / 价格 * 管理商品 购买 / 退款 * 这样就违背了单一职责原则 */ public interface IGood { /** * 获取商品名称 * @return */ String getName(); /** * 获取价格 * @return */ double getPrice(); /** * 购买商品 */ void buyGood(); /** * 退款 */ void refund(); }
2、拆分出的接口 1
package singleresponsibility; /** * 信息管理 * 该接口负责 获取商品信息 获取 名称 / 价格 */ public interface IGoodInfo { /** * 获取商品名称 * @return */ String getName(); /** * 获取价格 * @return */ double getPrice(); }
3、拆分出的接口 2
package singleresponsibility; /** * 商品管理 * 负责商品的 购买 / 退款 */ public interface IGoodManager { /** * 购买商品 */ void buyGood(); /** * 退款 */ void refund(); }
4、接口实现类
package singleresponsibility; /** * 商品实现类 * 同时实现 IGoodManager 和 IGoodInfo 两个接口 */ public class GoodImpl implements IGoodManager, IGoodInfo{ @Override public String getName() { return null; } @Override public double getPrice() { return 0; } @Override public void buyGood() { } @Override public void refund() { } }
五、单一职责原则代码示例 ( 方法的单一职责 )
如果一个方法中 , 存在了 大块的 if … else … 判定 , 说明应该将其拆分成两个不同的方法 ;
1、反面示例
package singleresponsibility; public class Good { /** * 更新商品的 名称 和 价格信息 * 该方法的职责就不是单一职责的 * 如果要针对 价格 信息修改策略进行修改 * 会连带这 另外一个 职责 修改名称 , 也存了未知风险 * @param name * @param price */ public void updateGoodInfo(String name, double price) { } }
2、单一职责示例
package singleresponsibility; public class Good { /** * 更新商品的名称 * @param name */ public void updateGoodName(String name) { } /** * 更新商品的价格 * @param price */ public void updateGoodPrice(double price) { } }