重构14-Break Responsibilities

把一个类的多个职责进行拆分,这贯彻了SOLID中的单一职责原则(SRP)。尽管对于如何划分“职责”经常存在争论,但应用这项重构还是十分简单的。我这里并不会回答划分职责的问题,只是演示一个结构清晰的示例,将类划分为多个负责具体职责的类。

public class Video {    public void PayFee(Double fee) {    }    public void RentVideo(Video video, Customer customer) {        customer.Videos.add(video);}    public Double CalculateBalance(Customer customer) {        return customer.sum(customer.LateFees);}}public class Customer {    public List<Double> LateFees;    public List<Video> Videos;    double sum(List<Double> LateFees){        double sum=0d;        for (Double d:LateFees){            sum=+d;}        return sum;}}

如你所见,Video类包含两个职责,一个负责处理录像租赁,另一个负责管理管理用户的租赁总数。要分离

职责,我们可以将用户的逻辑转移到用户类中。

public class Video {    public void RentVideo(Video video, Customer customer) {        customer.Videos.add(video);}}

public class Customer {    public List<Double> LateFees;    public List<Video> Videos;    public void PayFee(Double fee){}    public Double CalculateBalance(Customer customer) {        return sum(customer.LateFees);}    double sum(List<Double> LateFees) {        double sum = 0d;        for (Double d : LateFees) {            sum = +d;}        return sum;}}

来自为知笔记(Wiz)

时间: 2024-10-27 13:08:00

重构14-Break Responsibilities的相关文章

【Java重构系列】重构31式之封装集合

2009年,Sean Chambers在其博客中发表了31 Days of Refactoring: Useful refactoring techniques you have to know系列文章,每天发布一篇,介绍一种重构手段,连续发文31篇,故得名“重构三十一天:你应该掌握的重构手段”.此外,Sean Chambers还将这31篇文章[即31种重构手段]整理成一本电子书, 以下是博客原文链接和电子书下载地址: 博客原文:http://lostechies.com/seanchamber

Word Break (14)

Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words. For example, given s = "leetcode", dict = ["leet", "code"]. Return true because

sql while循环语句中CONTINUE 回到循环开始 / BREAK 跳出循环

CONTINUE 回到循环开始 / BREAK 跳出循环.下面是一个简单的例子: 1> DECLARE2> @testvalue AS INT;3> BEGIN-- 设置变量初始值 = 04> SET @testvalue = 0;-- 当变量小于5 循环5> WHILE @testvalue < 56> BEGIN-- 变量递增7> SET @testvalue = @testvalue + 1; -- 如果 变量=2, 那么回到循环开始8> IF 

[游戏模版14] Win32 键盘控制

>_<:compared with the previous article,this one only adds key-message listener. >_<:up down left right control the roal movement. 1 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 2 { 3 int wmId, wmEvent; 4 PAIN

对柳峰博主的微信公众号后台示例的部分重构

柳峰博主的专栏(http://blog.csdn.net/column/details/wechatmp.html)和王信平博主的专栏(http://www.cnblogs.com/wangshuo1/)对微信公众号开发已经做了比较详尽的阐述,基本上照搬,就可以做出第一个微信公众号后台应用.但是在『照搬』的过程中,发现有些地方总是觉得别扭,由着完美主义者的性格使然,对以下这几个地方做个小优化吧. 一.区别消息和响应 原来的消息类(用户发给后台)和响应类(后台回给用户)有这些: 我改成了这样的:

1.C语言关键字(auto break case char const swtich)

ANSI C标准C语言共有32个关键字,分别为: auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while 1)auto:一个自动存储变量的关键字,也就是声明一块

Word Break leetcode java

题目: Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words. For example, given s = "leetcode", dict = ["leet", "code"]. Return true bec

重学Python - Day 03 - python基础 -&gt; while循环实例 + Continue &amp;&amp; break的应用 + 列表的初步学习

while语句的应用 实例如下: 1 """ 2 述求:用户登录系统,最多只能登录三次 3 第三次失败后,程序终止 4 5 """ 6 user_table = {"python":"important","java":"more_important","shell":"linux"} 7 time = 1 8 9 while

Javascript-关于break、continue、return语句

JS-break:break语句会使运行的程序立刻退出包含在最内层的循环或者退出一个switch语句.由于它是用来退出循环或者switch语句,所以只有当它出现在这些语句时,这种形式的break语句才是合法的 1 for(var i=1;i<=10;i++) { 2 if(i==8) { 3 break; 4 } 5 console.log(i); 6 } 7 //当i=8的时候,直接退出for这个循环.这个循环将不再被执行!输出结果:1234567 8 var n=1; 9 var n=2;

Review on C Programming Language

1. GCC命令的使用 单个文件,一步到位: gcc ./src/test.c -o ./bin/test -I ./include -std=gnu99 多个文件,一步到位: gcc ./src/test.c ./src/other.c -o ./bin/test -I ./include -std=gnu99 相当于先逐个编译,再一步链接: gcc -c ./src/test.c -o ./test.o -I ./include -std=gnu99 gcc -c ./src/other.c