重构13-Extract Method Object(提取方法对象)
public class OrderLineItem {
public Double Price;
}
public class Order {
private List<OrderLineItem> OrderLineItems;
private List<Double> Discounts;
private Double Tax;
public Double Calculate() {
Double subTotal = 0d;
// Total up line items
for(OrderLineItem lineItem : OrderLineItems) {
subTotal += lineItem.Price;
}
// Subtract Discounts
for(Double discount : Discounts) subTotal -= discount;
// Calculate Tax
Double tax = subTotal * Tax;
// Calculate GrandTotal
Double grandTotal = subTotal + tax;
return grandTotal;
}
}
public class OrderLineItem{
public Double Price;
}
public class Order {
public List<OrderLineItem> OrderLineItems;
public List<Double> Discounts;
public Double Tax;
public Double Calculate() {
return new OrderCalculator(this).Calculate();
}
}
public class OrderCalculator {
private Double SubTotal;
private List<OrderLineItem> OrderLineItems;
private List<Double> Discounts;
private Double Tax;
public OrderCalculator(Order order) {
OrderLineItems = order.OrderLineItems;
Discounts = order.Discounts;
Tax = order.Tax;
}
public Double Calculate() {
CalculateSubTotal();
SubtractDiscounts();
CalculateTax();
return SubTotal;
}
private void CalculateSubTotal() {
// Total up line items
for(OrderLineItem lineItem : OrderLineItems) SubTotal += lineItem.Price;
}
private void SubtractDiscounts() {
// Subtract Discounts
for(Double discount : Discounts) SubTotal -= discount;
}
private void CalculateTax() {
// Calculate Tax
SubTotal += SubTotal * Tax;
}
}
重构13-Extract Method Object(提取方法对象)的更多相关文章
- 重构13天 抽取方法对象(Extract Method Object)
理解:本文中的“提取方法对象”是指当你发现一个方法中存在过多的局部变量时,你可以通过使用“提取方法对象”重构来引入一些方法,每个方法完成任务的一个步骤,这样可以使得程序变得更具有可读性. 详解:如下代 ...
- 从文章"避免复制与粘贴"到文章"Extract Method"的反思(1)
看了一个比我牛的人的博客园的博文"避免复制和粘贴".里面提到了重构手法Extract Method. 所以又搜了一下Extract Method. 这里先自我理解Extract ...
- 重构 改善既有代码的设计 Replace Method with Method Object(以函数对象取代函数)
你有一个大型函数,其中对局部变量的使用使你无法采用Extract Method. 将这个函数放进一个单独对象中,如此一来局部变量就成了对象内的字段.然后你可以在同一个对象中将这个大型函数分解为多个小型 ...
- 重构改善既有代码设计--重构手法08:Replace Method with Method Object (以函数对象取代函数)
你有一个大型函数,其中对局部变量的使用,使你无法釆用 Extract Method. 将这个函数放进一个单独对象中,如此一来局部变量就成了对象内的值域(field) 然后你可以在同一个对象中将这个大型 ...
- 『重构--改善既有代码的设计』读书笔记----Replace Method with Method Object
有时候,当你遇到一个大型函数,里面的临时变量和参数多的让你觉得根本无法进行Extract Method.重构中也大力的推荐短小函数的好处,它所带来的解释性,复用性让你收益无穷.但如果你遇到上种情况,你 ...
- 重构改善既有代码设计--重构手法01:Extract Method (提炼函数)
背景: 你有一段代码可以被组织在一起并独立出来.将这段代码放进一个独立函数,并让函数名称解释该函数的用途. void PrintOwing(double amount) { PrintBanner() ...
- 『重构--改善既有代码的设计』读书笔记----Extract Method
在编程中,比较忌讳的一件事情就是长函数.因为长函数代表了你这段代码不能很好的复用以及内部可能出现很多别的地方的重复代码,而且这段长函数内部的处理逻辑你也不能很好的看清楚.因此,今天重构第一个手法就是处 ...
- 从文章"避免复制与粘贴"到文章"Extract Method"的反思(3)
在牛人的博客中提到了..如果你的代码可以copy-past的时候,那么久证明你的代码出现了重复.而这种重复仅仅是虚假的代码行的增加而不是像其他的代码复用那样降级成本. copy-pase代码意味着你违 ...
- VS Extract Method
前言 看重构6.4Replace Temp with Query(以查询取代临时变量)中提到Replace Temp with Query往往是你运用Extract Method之前必不可少的一个步骤 ...
随机推荐
- C++视频课程小结(3)
C++远征之封装篇(上) 章节介绍: 每章小结: 第一章:课程介绍. 按照惯例是章节的总介绍,内容明显多了很多(为了做作业我还要赶进度的说),主要说了:类和对象是本章的主角,然后还有很多配角,像数据成 ...
- JPA 原生态SQL 的复杂查询之createNamedQuery
JPA 原生态SQL 的复杂查询之createNamedQuery调用存储过程,返回的List字段对应的填充实体============实体类,调用存储过程====================== ...
- SQL Server sql 操作
1.重命名表将表OLD重命名为NEW: EXEC sp_rename 'OLD','NEW' 2.重命名列将表table1中的列old重命名为new: EXEC sp_rename 'table1.o ...
- 关于html和body高度 登录页面登录框永远保持在页面垂直水平居中位置
HTML CSS 解说,水平居中就不用多说了,给div.login_wrap设置个宽度,然后margin:0 auto;就可以做到.但是这里这样做,这里使用了两层div 外层使用margin:0 au ...
- asp获取勾选checkbox的值
Dim str_select str_select = CStr(request.Form("c_name")) c_name是checkbox的name
- yum update Transaction Check Error
update系统时,发现其中一台server居然提示: Transaction Check Error:file /usr/lib/perl5/5.8.8/CGI.pm from install of ...
- perl学习笔记(4)——动态加载
在写perl的时候,如果要应用到各种平台的话,比如linux 和windows,会遇到各种问题,有时就是要根据系统类型来加载各种库,之前写的就是这样的, if($^O eq 'linux'){ use ...
- 【转】python代码风格-PEP8
转载自http://www.douban.com/note/134971609/ Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下 ...
- Codeforces Round #180 (Div. 2) C. Parity Game 数学
C. Parity Game 题目连接: http://www.codeforces.com/contest/298/problem/C Description You are fishing wit ...
- 图片流Base64编码 转图片
using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Web; ...