javascript基础----事件模型和事件种类
摘要:EventTarget接口 addEventListener() addEventListener方法用于在当前节点或对象上,定义一个特定事件的监听函数。 // 使用格式 target.addEventListener(type, listener[, useCapture]); // 实例 win
阅读全文
posted @
2018-02-26 15:45
Sharpest
编辑
javascript基础----Element对象
摘要:Element对象对应网页的HTML标签元素。每一个HTML标签元素,在DOM树上都会转化成一个Element节点对象(以下简称元素节点)。 特征相关的属性 Element.attributes Element.attributes属性返回一个类似数组的对象,成员是当前元素节点的所有属性节点 Ele
阅读全文
posted @
2018-02-26 10:24
Sharpest
编辑
javascript基础----Text节点和DocumentFragment节点
摘要:Text节点的概念 Text节点代表Element节点和Attribute节点的文本内容 // 获取Text节点 var textNode = document.querySelector('p').firstChild; // 创造Text节点 var textNode = document.cr
阅读全文
posted @
2018-02-26 10:17
Sharpest
编辑
javascript基础----attributes属性的操作
摘要:HTML元素包括标签名和若干个键值对,这个键值对就称为“属性”(attribute)。 <a id="test" href="http://www.example.com"> 链接 </a> 上面代码中,a元素包括两个属性:id属性和href属性。 Element.attributes属性 HTML
阅读全文
posted @
2018-02-26 10:16
Sharpest
编辑
javascript基础-----document模型
摘要:概述 document节点是文档的根节点,每张网页都有自己的document节点。window.document属性就指向这个节点。只要浏览器开始载入HTML文档,这个节点对象就存在了,可以直接调用。 内部节点属性 document.doctype,document.documentElement,
阅读全文
posted @
2018-02-26 09:14
Sharpest
编辑
javascript基础----DOM 模型概述
摘要:基本概念 DOM 是 JavaScript 操作网页的接口,全称为“文档对象模型”(Document Object Model)。它的作用是将网页转为一个 JavaScript 对象,从而可以用脚本进行各种操作(比如增删内容)。 JavaScript 也是最常用于 DOM 操作的语言 节点 DOM的
阅读全文
posted @
2018-02-26 09:07
Sharpest
编辑
java中使用MD5进行加密
摘要:转自:https://blog.csdn.net/konglongaa/article/details/78005800 在各种应用系统的开发中,经常需要存储用户信息,很多地方都要存储用户密码,而将用户密码直接存储在服务器上显然是不安全的,本文简要介绍工作中常用的 MD5加密算法,希望能抛砖引玉。(
阅读全文
posted @
2018-02-24 17:37
Sharpest
编辑
java生成6位随机数的5种方法
摘要:转自:https://blog.csdn.net/u012491783/article/details/76862526/
阅读全文
posted @
2018-02-24 17:19
Sharpest
编辑
java格式化时间到毫秒
摘要:转自:https://blog.csdn.net/iplayvs2008/article/details/41910835 java格式化时间到毫秒: SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss:SS
阅读全文
posted @
2018-02-24 16:58
Sharpest
编辑
javascript基础----面向对象编程
摘要:构造函数与 new 命令 对象是什么 (1)对象是单个实物的抽象。 一本书、一辆汽车、一个人都可以是对象,一个数据库、一张网页、一个与远程服务器的连接也可以是对象。当实物被抽象成对象,实物之间的关系就变成了对象之间的关系,从而就可以模拟现实情况,针对对象进行编程。 (2)对象是一个容器,封装了属性(
阅读全文
posted @
2018-02-24 11:15
Sharpest
编辑
javascript基础---属性描述对象
摘要:JavaScript 提供了一个内部数据结构,用来描述对象的属性,控制它的行为,比如该属性是否可写、可遍历等等。这个内部数据结构称为“属性描述对象”(attributes object)。每个属性都有自己对应的属性描述对象,保存该属性的一些元信息。 下面是属性描述对象的一个例子。 { value:
阅读全文
posted @
2018-02-24 11:13
Sharpest
编辑
javascript基础---console对象
摘要:1.浏览器实现 console对象的浏览器实现,包含在浏览器自带的开发工具之中。以 Chrome 浏览器的“开发者工具”(Developer Tools)为例,可以使用下面三种方法的打开它。 打开开发者工具以后,顶端有多个面板。 Elements:查看网页的 HTML 源码和 CSS 代码。 Res
阅读全文
posted @
2018-02-24 11:12
Sharpest
编辑
javascript基础---JSON对象
摘要:1.JSON 格式 JSON 格式(JavaScript Object Notation 的缩写)是一种用于数据交换的文本格式 JSON 对值的类型和格式有严格的规定。 复合类型的值只能是数组或对象,不能是函数、正则表达式对象、日期对象。 原始类型的值只有四种:字符串、数值(必须以十进制表示)、布尔
阅读全文
posted @
2018-02-24 11:11
Sharpest
编辑
javascript基础---RegExp对象
摘要:概述 新建正则表达式有两种方法。一种是使用字面量,以斜杠表示开始和结束。 var regex = /xyz/; 另一种是使用RegExp构造函数。 var regex = new RegExp('xyz'); RegExp构造函数还可以接受第二个参数,表示修饰符(详细解释见下文)。 var rege
阅读全文
posted @
2018-02-24 11:08
Sharpest
编辑
javascript基础--Date对象
摘要:普通函数的用法 Date对象可以作为普通函数直接调用,返回一个代表当前时间的字符串。 Date() // "Tue Dec 01 2015 09:34:43 GMT+0800 (CST)" 注意,即使带有参数,Date作为普通函数使用时,返回的还是当前时间。 Date(2000, 1, 1) //
阅读全文
posted @
2018-02-24 11:02
Sharpest
编辑
javascript基础---Math对象
摘要:静态属性 Math对象的静态属性,提供以下一些数学常数。 Math.E:常数e。 Math.LN2:2 的自然对数。 Math.LN10:10 的自然对数。 Math.LOG2E:以 2 为底的e的对数。 Math.LOG10E:以 10 为底的e的对数。 Math.PI:常数 Pi。 Math.S
阅读全文
posted @
2018-02-24 11:01
Sharpest
编辑
javascript基础---String对象
摘要:概述 String对象是 JavaScript 原生提供的三个包装对象之一,用来生成字符串对象。 var s1 = 'abc'; var s2 = new String('abc'); typeof s1 // "string" typeof s2 // "object" s2.valueOf()
阅读全文
posted @
2018-02-24 11:00
Sharpest
编辑
javascript基础---包装对象
摘要:定义 所谓“包装对象”,就是分别与数值、字符串、布尔值相对应的Number、String、Boolean三个原生对象。这三个原生对象可以把原始类型的值变成(包装成)对象。 var v1 = new Number(123); var v2 = new String('abc'); var v3 = n
阅读全文
posted @
2018-02-24 10:59
Sharpest
编辑
javascript基础---Number对象
摘要:概述 Number对象是数值对应的包装对象,可以作为构造函数使用,也可以作为工具函数使用。 作为构造函数时,它用于生成值为数值的对象。 var n = new Number(1); typeof n // "object" 上面代码中,Number对象作为构造函数使用,返回一个值为1的对象。 作为工
阅读全文
posted @
2018-02-24 10:59
Sharpest
编辑
javascript基础----Array对象
摘要:构造函数 Array是 JavaScript 的原生对象,同时也是一个构造函数,可以用它生成新的数组。 var arr = new Array(2); arr.length // 2 arr // [ empty x 2 ] 可以看到,Array作为构造函数,行为很不一致。因此,不建议使用它生成新数
阅读全文
posted @
2018-02-24 10:58
Sharpest
编辑
javascript基础-----Object对象
摘要:概述 JavaScript 的所有其他对象都继承自Object对象,即那些对象都是Object的实例。 (1)Object对象本身的方法 所谓”本身的方法“就是直接定义在Object对象的方法。 Object.print = function (o) { console.log(o) }; 上面代码
阅读全文
posted @
2018-02-24 10:57
Sharpest
编辑
javascript基础----错误处理机制
摘要:Error 实例对象 JavaScript 解析或运行时,一旦发生错误,引擎就会抛出一个错误对象。JavaScript 原生提供Error构造函数,所有抛出的错误都是这个构造函数的实例。 var err = new Error('出错了'); err.message // "出错了" 上面代码中,我
阅读全文
posted @
2018-02-24 10:51
Sharpest
编辑
javascript基础----数据类型转换
摘要:Number 原始类型值的转换规则如下。 // 数值:转换后还是原来的值 Number(324) // 324 // 字符串:如果可以被解析为数值,则转换为相应的数值 Number('324') // 324 // 字符串:如果不可以被解析为数值,返回 NaN Number('324abc') //
阅读全文
posted @
2018-02-24 10:49
Sharpest
编辑
javascript学习-----函数
摘要:函数的声明 JavaScript 有三种声明函数的方法。 (1)function 命令 function命令声明的代码区块,就是一个函数。function命令后面是函数名,函数名后面是一对圆括号,里面是传入函数的参数。函数体放在大括号里面。 function print(s) { console.l
阅读全文
posted @
2018-02-24 10:48
Sharpest
编辑
javascript----运算符
摘要:加法运算符 加法运算符(+)是最常见的运算符,用来求两个数值的和。 1 + 1 // 2 如果是两个字符串相加,这时加法运算符会变成连接运算符,返回一个新的字符串,将两个原字符串连接在一起。 'a' + 'bc' // "abc" 算术运算符 包括加法运算符在内,JavaScript 共提供10个算
阅读全文
posted @
2018-02-24 10:48
Sharpest
编辑
javascript基础---数组
摘要:定义 数组(array)是按次序排列的一组值。每个值的位置都有编号(从0开始),整个数组用方括号表示。 var arr = ['a', 'b', 'c']; 数组的本质 本质上,数组属于一种特殊的对象。typeof运算符会返回数组的类型是object。 typeof [1, 2, 3] // "ob
阅读全文
posted @
2018-02-24 10:46
Sharpest
编辑
javascript基础----对象
摘要:1生成方法 什么是对象?简单说,对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合。 什么是对象?简单说,对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合。 var obj = { foo: 'Hello', bar: 'World' }; 什么
阅读全文
posted @
2018-02-24 10:45
Sharpest
编辑
javascript基础-----字符串
摘要:1定义 字符串就是零个或多个排在一起的字符,放在单引号或双引号之中。True 2.转义 反斜杠(\)在字符串内有特殊含义,用来表示一些特殊字符,所以又称为转义符。 需要用反斜杠转义的特殊字符,主要有下面这些。 \0 :null(\u0000) \b :后退键(\u0008) \f :换页符(\u00
阅读全文
posted @
2018-02-24 10:44
Sharpest
编辑
javascript基础------数值
摘要:1.整数和浮点数 JavaScript 语言的底层根本没有整数 由于浮点数不是精确的值,所以涉及小数的比较和运算要特别小心。 0.1 + 0.2 0.3 // false 0.3 / 0.1 // 2.9999999999999996 (0.3 - 0.2) (0.2 - 0.1) // false
阅读全文
posted @
2018-02-24 10:43
Sharpest
编辑
javascript基础----数据类型
摘要:1.JavaScript 的数据类型,共有六种。 数值(number):整数和小数(比如1和3.14) 字符串(string):文本(比如Hello World)。 布尔值(boolean):表示真伪的两个特殊值,即true(真)和false(假) undefined:表示“未定义”或不存在,即由于
阅读全文
posted @
2018-02-24 10:42
Sharpest
编辑
javascript基础---javascript基本语法
摘要:1.语句 下面是赋值语句 Var a = 1 + 3; 这条语句先用var命令,声明了变量a,然后将1 + 3的运算结果赋值给变量a。 语句以分号结尾,一个分号就表示一个语句结束。多个语句可以写在一行内。 Var a = 1 + 3 ; var b = ‘abc’; 语句和表达式的区别在于,前者主要
阅读全文
posted @
2018-02-24 10:41
Sharpest
编辑
javascript基础----什么是Javascript
摘要:JavaScript 是一种轻量级的脚本语言。所谓“脚本语言”,指的是它不具备开发操作系统的能力,而是只用来编写控制其他大型应用程序的“脚本”。 目前,已经嵌入 JavaScript 的宿主环境有多种,最常见的环境就是浏览器,另外还有服务器环境,也就是 Node 项目。 JavaScript 的核心
阅读全文
posted @
2018-02-24 10:40
Sharpest
编辑
IntelliJ IDEA java项目导入jar包,打jar包
摘要:转自:https://www.cnblogs.com/yulia/p/6824058.html 一、导入 1、java项目在没有导入该jar包之前,如图: 2、点击 File -> Project Structure(快捷键 Ctrl + Alt + Shift + s),点击Project Str
阅读全文
posted @
2018-02-23 16:52
Sharpest
编辑
被拒绝的遗赠 (Refused Bequest)
摘要:子类应该继承超类的函数和数据。但如果它们不想或不需要继承,又该这么办呢?它们得到所有礼物,却只从中挑选几样来玩。 按传统说法,这就意味着继承体系设计错误。你需要为这个子类新建一个兄弟类,再次运用 push down Method (函数下移)和 push down field (字段下移)把所有用不
阅读全文
posted @
2018-02-09 10:53
Sharpest
编辑
过多的注释 (Comments)
摘要:我们之所以在这里提到注释,是因为人们常把它当做除臭剂来使用。常常会有这样的情况:你看到一段代码有着长长的注释,然后发现,这些注释之所以存在是因为代码很糟糕。 注释可以带我们找到代码中的坏味道。找到坏味道后,我们首先应该以各种重构手法把坏味道去除。完成之后我们常常会发现:注释已经变得多余了,因为代码已
阅读全文
posted @
2018-02-09 10:51
Sharpest
编辑
不完美的类库----Introduce Foreign Method(引入外加函数)
摘要:你所使用的server class需要一个额外函数,但你无法修改这个class。 在client class中建立一个函数,并以一个server class实体作为第一引数(argument)。 Date newStart = new Date(previousEnd.getYear(), prev
阅读全文
posted @
2018-02-09 10:47
Sharpest
编辑
不完美的库类----Introduce Local Extension(引入本地扩展)
摘要:你所使用的server class需要一些额外函数,但你无法修改这个class。 建立一个新class,使它包含这些额外函数。让这个扩展品成为source class的subclass(子类)或wrapper(外覆类)。 Client Class... private nextDate(Date):
阅读全文
posted @
2018-02-09 10:43
Sharpest
编辑
不完美的库类 (Incomplete Library Class)
摘要:复用常被视为对象的终极目的。不过复用的意义常被高估:大多数对象只要够用就好。但是无可否认,许多编程技术都建立在程序库的基础上。 库类的构筑者没用未卜先知的能力,不能因此责怪他们。麻烦的是库往往构造的不够好,而且往往不可能让我们修改其中的类使它们完成我们希望完成的工作。这是否意味着那些经过实践检验的技
阅读全文
posted @
2018-02-09 10:42
Sharpest
编辑
java.util.Collections.unmodifiableSet()方法实例
摘要:unmodifiableSet() 方法返回指定set的不可修改视图。 声明 以下是java.util.Collections.unmodifiableSet()方法的声明。 参数 s--这是一个不可修改视图是要返回的集合。 s--这是一个不可修改视图是要返回的集合。 返回值 在方法调用返回指定se
阅读全文
posted @
2018-02-09 10:35
Sharpest
编辑
纯数据类---Encapsulate Collection(封装群集)
摘要:有个函数(method)返回一个群集(collection).让这个函数返回该群集的一个只读映件(read-only view), 并在这个class中提供[添加/移除](add/remove)群集元素的函数. Person... getCourse() :Set setCourse(Set) ==
阅读全文
posted @
2018-02-09 10:33
Sharpest
编辑
纯数据类---Self Encapsulate Field(自封装值域)
摘要:你直接访问一个值域(field),但与值域之间的耦合关系逐渐变得笨拙。 为这个值域建立取值/设值函数(getting and setting methods ),并且只以这些函数来访问值域。 private int _low, _high; boolean includes (int arg) {
阅读全文
posted @
2018-02-08 19:11
Sharpest
编辑
中间人--Remove Middle man
摘要:5Hide Delegate(隐藏“委托关系”) 概要 客户通过一个委托关系来调用另一个对象。 在服务类上建立客户所需的所有函数,用以隐藏委托关系。 动机 如果某个客户先通过服务对象的字段或者属性得到另一个对象,然后调用后者的函数,那么客户就必须知晓这一层委托关系。万一委托关系发生变化,客户也得相应
阅读全文
posted @
2018-02-08 18:48
Sharpest
编辑
中间人---Inline Method (内联函数)
摘要:一个函数调用的本体与名称同样清楚易懂。在函数调用点插入函数体,然后移除该函数。 int GetRating() { return MoreThanfiveLateDeliverise() ? 2 : 1; } bool MoreThanfiveLateDeliverise() { return _n
阅读全文
posted @
2018-02-08 18:42
Sharpest
编辑
狎昵关系-- replace inheritance with delegation(以委托取代继承)
摘要:某个子类只使用超类接口中的一部分,或是根本不需要继承而来的数据。 在子类中新建一个字段用以保存超类;调整子类函数,令它改而委托超类;然后去掉两者之间的继承体系。 动机: 一开始继承了一个类,随后发现超类中的许多操作并不真正适用于子类。这种情况下,你所拥有的接口并未真正反映出子类的功能。你可能发现你从
阅读全文
posted @
2018-02-08 17:30
Sharpest
编辑
狎昵关系--change bidirectional association to unidirectional (将双向关联改为单向关联)
摘要:两个类之间有双向关联,但其中一个类如今不再需要另一个类的特性。 动机: 双向关联很有用,但你必须为它付出代价,那就是维护双向连接。 大量的双向连接也很容易造成“僵尸对象”。 双向关联也迫使两个类之间有了依赖:对其中一个类的任何修改,都可能引发另一个类的变化。 做法: 找出保存“你想去除的指针”的字段
阅读全文
posted @
2018-02-08 17:28
Sharpest
编辑
狎昵关系 (Inappropriate Intimacy)
摘要:有时候你会看到2个类过于亲密,花费太多时间起探究彼此的private成分。你可以采用Move Method (搬移函数)和 Move Field (搬移字段)帮他们划清界限。你也可以看看是否可以运用 Change Bidirectional Association to Unidirectional
阅读全文
posted @
2018-02-08 16:48
Sharpest
编辑
异曲同工的类 (Alternative Classes with Different Interfaces)
摘要:如果2个函数做同一件事,却有着不同的签名,请运用 Rename Method (函数改名)根据它们的用途重新命名。但这往往不够,请反复运用 Move Method (搬移函数)将某些行为移入类,直到2者的协议一致为止。如果你必须反复而赘余的移入代码才能完成这些,或许可运用Extract Superc
阅读全文
posted @
2018-02-08 16:41
Sharpest
编辑
令人迷惑的临时字段(Temporary Field)
摘要:有时你会看到这样的对象:其内某个实例变量仅为某种特定情况而设。这样的代码让人不易理解,因为你通常认为对象在所有时候都需要它的所有变量。在变量未被使用的情况下猜测当初设置目的,会让你发疯。 请使用Extract Class (提炼类)给这些变量创造一个家,然后把所有和这些变量相关的代码都放进这个新家,
阅读全文
posted @
2018-02-08 15:36
Sharpest
编辑
过度耦合的消息链条--Hide Delegate(隐藏委托关系)
摘要:客户直接调用其server object(服务对象)的delegate class。 在server端(某个class)建立客户所需的所有函数,用以隐藏委托关系(delegation)。 Client--〉Person | | Department ==〉 Client --〉Person--〉De
阅读全文
posted @
2018-02-08 15:08
Sharpest
编辑
message chains (过度耦合的消息链)
摘要:一个对象请求另一个,后者在请求下一个对象,....这就是消息链。采取这种方式,意味客户代码将与查找过程中的导航结构紧密耦合,一旦对象间的关系发生任何变化,客户端就不得不做出相应修改。 这时候应该使用hide delegate。 通常更好的手法:先观察消息链最终得到的对象是用来干什么的,看看能否以ex
阅读全文
posted @
2018-02-08 15:07
Sharpest
编辑
夸夸其谈未来性(Speculative Generality)
摘要:如果你的某个抽象类其实没有太大作用,请运用 Collapse Hierarch (折叠继承体系)。不必要的委托可运用 Inline Class (将类内联化)除掉。如果函数的某些参数未被用上,可对它实施 Remove Parameter (移除参数)。如果函数名称带有多余的抽象意味,应该对它实施Re
阅读全文
posted @
2018-02-08 14:52
Sharpest
编辑
平行集成体系---Move Field
摘要:Motivation 如果某个field,在其所驻class之外的另一个class中有更多的函数使用了它,那么可以考虑将这个field移动到另一个class。 Mechanics 1 如果field属性为public,应该先使用EncapsulateField或者Self Encapsulate F
阅读全文
posted @
2018-02-08 14:39
Sharpest
编辑
平行继承体系---Move Method(搬移函数)
摘要:发现:程序中有个函数与其所驻类之外的另一个类进行更多交流。 解决:在该函数最常引用的类中建立一个有着类似行为的新函数。将旧函数变成一个单纯的委托函数,或是将旧函数完全移除。 动机 “搬移函数”是重构理论中比较重要的特性之一。一般情况下,如果一个类有太多的行为,或者如果一个类与另一个类有太多合作而形成
阅读全文
posted @
2018-02-08 14:30
Sharpest
编辑
平行继承体系(Parallel Inheritance Hierarchies)
摘要:平行继承体系其实是散弹式修改(Shotgun Surgery)的特殊情况。在这种情况下,每当你为某个类增加1个子类,必须也为另一个类相应增加1个子类。如果你发现某个继承体系的类名前缀和另一个继承体系的类名前缀完全相同,便是闻到了这种坏味道。 消除这种重复性的一般策略是:让一个继承体系的实例引用另一个
阅读全文
posted @
2018-02-08 14:11
Sharpest
编辑
冗赘类---Inline Class(将类内联化)
摘要:你的某个class没有做太多事情(没有承担足够责任)。 将class的所有特性搬移到另一个class中,然后移除原class。 class Person... private string _name; public string getTelephoneNumber(); private Tele
阅读全文
posted @
2018-02-08 14:06
Sharpest
编辑
冗 贅类--Collapse Hierarchy(折叠继承关系)
摘要:superclass 和subclass 之间无太大区别。 将它们合为一体。 动机(Motivation) 如果你曾经编写过继承体系,你就会知道,继承体系很容易变得过分复杂。所谓重构继承体系,往往是将函数和值域在体系中上下移动。完成这些动作后,你 很可能发现某个subclass 并未带来该有的价值,
阅读全文
posted @
2018-02-08 14:00
Sharpest
编辑
switch惊悚--introduce Null object (引入null对象)
摘要:需要再三检查某物是否为null value。 将null value (无效值)替换为 null object(无效对象)。 if (customer == null) plan = BillingPlan.basic();else plan = customer.getPlan(); ==〉 动机
阅读全文
posted @
2018-02-08 11:18
Sharpest
编辑
switch惊悚现身---Replace Conditional with Polymorphism(以多态取代条件式)
摘要:你手上有个条件式,它根据对象型别的不同而选择不同的行为。 将这个条件式的每个分支放进一个subclass 内的覆写函数中,然后将原始函数声明为抽象函数(abstract method)。 double getSpeed() { switch (_type) { case EUROPEAN: retu
阅读全文
posted @
2018-02-08 10:36
Sharpest
编辑
switch 惊悚现身(Switch Statements)
摘要:面向对象程序的一个最明显特征就是:少用switch或(case)语句。 从本质上说,switch语句的问题在于重复。 你常会发现switch语句散布于不同地点。如果要为它添加一个新的case子句,就必须找到所有switch语句并修改它们。 面向对象中的多态概念可为此带来优雅的解决办法。 大多数时候,
阅读全文
posted @
2018-02-07 19:29
Sharpest
编辑
基本类型偏执---Replace Array with Object(以对象取代数组)
摘要:你有一个数组(array),其中的元素各自代表不同的东西。 以对象替换数组。对于数组中的每个元素,以一个值域表示之。 String[] row = new String[3]; row [0] = "Liverpool"; row [1] = "15"; Performance row = new
阅读全文
posted @
2018-02-07 19:04
Sharpest
编辑
基本类型偏执--Replace Type Code with State/Strategy(以State/Strategy取代型别码)
摘要:你有一个type code ,它会影响class 的行为,但你无法使用subclassing。 以state object (专门用来描述状态的对象)取代type code 。 动机(Motivation) 本项重构和Replace Type Code with Subclasses 很相似,但如果
阅读全文
posted @
2018-02-07 18:42
Sharpest
编辑
基本类型偏执---Replace Type Code with Subclasses(以子类取代型别码)
摘要:你有一个不可变得type code,它会影响类的行为。 以一个子类取代这个type code。 动机 如果一个type code不会影响行为,你可以使用Replace Type Code with Class;但是,如果一个type code会影响行为,最好的办法就是借助多态来处理变化的行为。 一般
阅读全文
posted @
2018-02-07 17:27
Sharpest
编辑
基本类型偏执---Replace Type Code with Class(以类取代型别码)
摘要:class 中有一个数值型别码,但它不影响class的行为 以一个新的class替换该数值型别码。 class Person ...public static final int O = 0;public static final int A = 1;public static final int
阅读全文
posted @
2018-02-07 12:13
Sharpest
编辑
基本类型偏执---Replace Data Value with Object(以对象取代数据值)
摘要:你有一笔数据项(data item),需要额外的数据和行为。 将这笔数据项变成一个对象。 class Order... private string customer; ==> class Order... private Customer _customer; class Customer...
阅读全文
posted @
2018-02-07 10:37
Sharpest
编辑
基本类型偏执(Primitive Obsession)
摘要:对象技术的新手通常不愿意在小任务上运用小对象—像是结合数值和币种的money类,由一个起始值和结束值组成的range类等。你可以使用 Replace Data Value with Object (以对象取代数据值)将原本单独存在的数据值替换为对象。如果想要替换的数据值是类型码,而它并不影响行为,则
阅读全文
posted @
2018-02-07 10:35
Sharpest
编辑
数据泥团(Data Clumps)-Extract Class,Introduce Paramter Object,Preserve Whole Object
摘要:常常可以在很多地方看到相同的3、4项数据:2个类中相同的字段、许多函数签名中相同的参数。这些总是绑在一起出现的数据真应该拥有属于它们自己的对象。首先找出这些数据以字段形式出现的地方,运用Extract Class (提炼类)将它们提炼到一个独立对象中。然后将注意力转移到函数签名上,运用Introdu
阅读全文
posted @
2018-02-06 16:06
Sharpest
编辑
shotgun surgery(散弹式修改)
摘要:如果没遇到某种变化,都必须在许多不同的类内做出许多小修改,你所面临的坏味道就是shotgun surgery。 应该使用move method和move field把所有需要修改的代码放进同一个类。如果眼下没有合适的类可以安置这些代码,就创造一个。通常可以运用inline class把一系列相关行为
阅读全文
posted @
2018-02-06 15:30
Sharpest
编辑
散弹式修改--Inline Class(将类内联化)
摘要:你的某个class没有做太多事情(没有承担足够责任)。 将class的所有特性搬移到另一个class中,然后移除原class。 class Person... private string _name; public string getTelephoneNumber(); private Tele
阅读全文
posted @
2018-02-06 15:29
Sharpest
编辑
依恋情结--提取方法(Extract Method)
摘要:提取方法(Extract Method)是最常用的重构手法之一。当看到一个方法过长或者方法很难让人理解其意图的时候,这时候就可以用提取方法这种重构手法。 下面是我学习这个重构手法的笔记: 提取方法看起来好像仅仅是将被提取方法中的一段代码,放到目标方法中。其实,当方法足够复杂的时候,提取方法也会变得复
阅读全文
posted @
2018-02-06 15:08
Sharpest
编辑
依恋情结--Move Field
摘要:在类与类之间搬移状态和行为,是重构过程中必不可少的步骤。很有可能在你现在觉得正常的类,等你到了下个礼拜你就会觉得不合适。或者你在下个礼拜创建了一个新的类并且你需要讲现在类的部分字段和行为移动到这个新类中。如果你发现在一个类中的某个字段,更多的被别的类的函数所使用,包括设值set和取值get函数锁取用
阅读全文
posted @
2018-02-06 15:02
Sharpest
编辑
依恋情结----Move Method
摘要:毋容置疑,搬移方法(Move Method)应该是最常用的重构手段之一,正因为太常用而且较为简单,以至于很多人并不认为它是一种很有价值的重构,但事实并非如此,在最初的代码诞生之后,有些方法可能会被放在一些不合适的地方,例如,一个方法被其他类使用比在它所在的类中的使用还要频繁或者一个方法本身就不应该放
阅读全文
posted @
2018-02-06 14:40
Sharpest
编辑
发散式变化(DivergentChange)
摘要:发散式变化(Divergent Change) 发散式变化(Divergent Change) 类似于 霰弹式修改(Shotgun Surgery) ,但实际上完全不同。发散式变化(Divergent Change) 在一个类中修改多处。霰弹式修改(Shotgun Surgery)指的是同时对多个类
阅读全文
posted @
2018-02-06 14:32
Sharpest
编辑
过长参数化---Preserve Whole Object
摘要:你从某个对象中取出若干值,将它们作为某一次函数调用时的参数。 动机: 有时候,你会将来自同一对象的若干项数据作为参数,传递给某个函数。 这样做的问题在于:万一将来被调用函数需要新的数据项,你就必须查找并修改对此函数的所有调用。 如果你把这些数据所属的整个对象传给函数,可以避免这种尴尬的处境,因为被调
阅读全文
posted @
2018-02-06 14:25
Sharpest
编辑
过长参数化--Introduce Parameter Object(引入参数对象)
摘要:某些参数总是很自然地同时出现。 以一个对象取代这些参数。 动机(Motivation) 你常会看到特定的一组参数总是一起被传递。可能有好几个函数都使用这一组参数,这些函数可能隶属同一个class,也可能隶属不同的classes 。这样一组参数就是所谓的Date Clump (数据泥团)」,我们可以运
阅读全文
posted @
2018-02-06 14:16
Sharpest
编辑
过长的参数化--Replace Parameter with Method(以函数取代参数)
摘要:对象调用某个函数,并将所得结果作为参数,传递给另一个函数。而接受该参数的函数也可以(也有能力)调用前一个函数。 让参数接受者去除该项参数,并直接调用前一个函数。 int basePrice = _quantity * _itemPrice; discountLevel = getDiscountLe
阅读全文
posted @
2018-02-06 14:11
Sharpest
编辑
过大的类---Replace Data Value with Object(以对象取代数据值)
摘要:你有一笔数据项(data item),需要额外的数据和行为。 将这笔数据项变成一个对象。 class Order... private string customer; ==> class Order... private Customer _customer; class Customer...
阅读全文
posted @
2018-02-06 13:58
Sharpest
编辑
过大的类--Extrace Interface
摘要:若干客户使用class 接口中的同一子集;或者,两个classes 的接口有部分相同。 将相同的子集提炼到一个独立接口中。 动机(Motivation) classes 之间彼此互用的方式有若干种。 「使用一个class 」通常意味覆盖该class 的所有责任区( whole area of res
阅读全文
posted @
2018-02-06 11:05
Sharpest
编辑
过大的类---Extract Subclass (提炼子类)
摘要:class 中的某些特性(features)只被某些(而非全部)实体(instances)用到。 新建一个subclass ,将上面所说的那一部分特性移到subclass 中。 动机(Motivation) 使用Extract Subclass 的主要动机是:你发现class 中的某些行为只被一部分
阅读全文
posted @
2018-02-06 10:55
Sharpest
编辑
过大的类--- Extract Class
摘要:某个类做了应该由2个类做的事。建立一个新类,将相关的字段和函数从旧类搬移到新类。 动机:一个类应该是一个清楚地抽象,处理一些明确的责任。但是在实际工作中,类会不断成长扩展。你会在这儿加入一些功能,在哪加入一些数据。给某个类添加一项新责任时,你会觉得不值得为这项责任分离出一个单独的类。于是,随着责任不
阅读全文
posted @
2018-02-06 10:48
Sharpest
编辑
过大的类---过大的类(Large Class)
摘要:如果想利用单个类做太多的事,其内往往就会出现太多实例变量。这样 重复代码(Duplicated Code)就接踵而至了。 运用Extract Class (提炼类)将几个变量一起提炼到新类里。 提炼类时应该选择类内彼此相关的变量,将它们放在一起。 通常类内的数个变量有相同的前缀或字尾,这就意味有机会
阅读全文
posted @
2018-02-06 10:45
Sharpest
编辑
过长的函数--Decompose Conditional(分解条件表达式)
摘要:你有一个复杂的条件(if-then-else)语句。 从if、then、else三个段落中分别提炼出独立函数。 动机 程序之中,复杂的条件逻辑是最常导致复杂度上升的地点之一。 你必须编写代码来检查不同的条件分支、根据不同的分支做不同的事,然后,你很快就会得到一个相当长的函数。 大型函数自身就会使代码
阅读全文
posted @
2018-02-06 10:24
Sharpest
编辑
过长的函数--以函数对象取代函数(Replace Method with Method Object)
摘要:当对局部变量的引用无法使用Extract Method的时候,可以考虑将这个函数放入到一个单独的对象中去,如此一来,局部变量就变成了对象的字段,然后就可以在同一对象中将这个大型函数分解成小型函数。 如:在Order类中: [java] view plain copy package com.xuze
阅读全文
posted @
2018-02-06 10:15
Sharpest
编辑
过长的函数--Replace Temp With Query(以查询取代临时变量)
摘要:double basePrice = _quantity * _itemPrice;if(basePrice > 1000) return basePrice * 0.95;else return basePrice * 0.98; ==> if(basePrice() > 1000) return
阅读全文
posted @
2018-02-06 10:09
Sharpest
编辑
过长的函数--提炼函数(Extract method)
摘要:在编程中,比较忌讳的一件事情就是长函数。因为长函数代表了你这段代码不能很好的复用以及内部可能出现很多别的地方的重复代码,而且这段长函数内部的处理逻辑你也不能很好的看清楚。因此,今天重构第一个手法就是处理长函数--Extract Method,抽取成一个独立的小函数。 我个人来说也很喜欢短小函数,因为
阅读全文
posted @
2018-02-06 10:06
Sharpest
编辑
重复代码--Form Template Method (塑造模板函数)
摘要:你有一些子类,其中相应的某些函数以相同的顺序执行类似的操作,但各个操作的细节不同。将这些操作分别放进独立的函数中,并保持它们都有相同的签名,于是原函数也就变得相同了,然后将原函数上移至超类。 动机:继承是避免重复行为的一个强大工具。无论何时,只要你看见2个子类之中有类似的函数,就可以把它们提升到超类
阅读全文
posted @
2018-02-06 09:55
Sharpest
编辑
重复代码--Pull Up Method(函数上移)
摘要:有些函数,在各个subclass 中产生完全相同的结果。 将该函数移至superclass。 动机(Motivation) 避免「行为重复」是很重要的。尽管「重复的两个函数」也可以各自工作得很好, 但「重复」自身会成为错误的滋生地,此外别无价值。无论何时,只要系统之内出现重复,你就会面临「修改其中一
阅读全文
posted @
2018-02-06 09:49
Sharpest
编辑
重复代码--Extract Class
摘要:某个类做了应该由2个类做的事。建立一个新类,将相关的字段和函数从旧类搬移到新类。 动机:一个类应该是一个清楚地抽象,处理一些明确的责任。但是在实际工作中,类会不断成长扩展。你会在这儿加入一些功能,在哪加入一些数据。给某个类添加一项新责任时,你会觉得不值得为这项责任分离出一个单独的类。于是,随着责任不
阅读全文
posted @
2018-02-06 09:40
Sharpest
编辑
重复代码---提炼函数(Extract method)
摘要:1、Extract Method:提炼方法 将有些代码单独提取出来放入到一个独立的函数中,并让函数名称来解释该函数的用途。 [java] view plain copy public void printOwing(double amount) { printBanner(); System.out
阅读全文
posted @
2018-02-06 09:33
Sharpest
编辑
WEBSERVICE之JDK开发webservice
摘要:转自:https://www.cnblogs.com/w-essay/p/7357262.html 一、开发工具与环境 1、 jdk1.6版本以上(jdk1.6.0_21及以上版本) 2 、eclipse4.5版本 3、与Web服务相关的类,都位于Javax.jws.*包中 @WebService—
阅读全文
posted @
2018-02-05 15:57
Sharpest
编辑
Centos 7 如何卸载docker
摘要:1首先搜索已经安装的docker 安装包 [root@localhost ~]# yum list installed|grep docker 或者使用该命令 [root@localhost ~]# rpm -qa|grep docker docker.x86_64 2:1.12.6-16.el7.
阅读全文
posted @
2018-02-02 19:34
Sharpest
编辑
Linux uname 命令 打印系统信息
摘要:转自:https://www.jb51.net/LINUXjishu/417626.html 1、概述 打印系统信息 2、命令格式 uname [OPTION]... 3、常用命令参数 打印一些系统信息,如果没有选项那么和 -s 一样。 -a, --all 打印所有信息 [java] view pl
阅读全文
posted @
2018-02-02 15:51
Sharpest
编辑
IDEA中 @override报错的解决方法
摘要:转自:https://blog.csdn.net/gdsgdh308227363/article/details/82528549
阅读全文
posted @
2018-02-02 14:31
Sharpest
编辑
使用VMware搭建3台一模一样的Linux虚拟机
摘要:转自:https://www.linuxidc.com/Linux/2014-08/105909.htm 简介:VMware可以在个人本地一台笔记本机器上同时运行二个或更多Windows、DOS、LINUX系统。与“多启动”系统相比,VMWare采用了完全不同的概念。多启动系统在一个时刻只能运行一个
阅读全文
posted @
2018-02-01 15:42
Sharpest
编辑
java使用httpclient封装post请求和get的请求
摘要:转自:https://blog.csdn.net/qq9808/article/details/78320816
阅读全文
posted @
2018-02-01 10:55
Sharpest
编辑