<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[jiqikewang的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/jiqikewang</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; jiqikewang]]></copyright><item><title><![CDATA[重构第十一章学习]]></title><link>https://blog.youkuaiyun.com/jiqikewang/article/details/7106392</link><guid>https://blog.youkuaiyun.com/jiqikewang/article/details/7106392</guid><author>jiqikewang</author><pubDate>Tue, 27 Dec 2011 17:12:12 +0800</pubDate><description><![CDATA[1：如果多个子类有相同的值域、方法，那么将这个值域、方法放到父类里。
2：如果多个子类的构造函数代码几乎一样，或者说有很多一样的，就把一样的部分放到父类中去，然后子类中调用super
3：如果父类中的某个方法或者值域只是某些个子类中有，那么直接放到子类里去。
4：折叠继承关系，子类和父类之间差别不大。
（待续）


《重构》的学习暂时结束，刚开始看的时候比较有感触，但是到了后来就有点]]></description><category></category></item><item><title><![CDATA[封装使用的一个小例子]]></title><link>https://blog.youkuaiyun.com/jiqikewang/article/details/7103591</link><guid>https://blog.youkuaiyun.com/jiqikewang/article/details/7103591</guid><author>jiqikewang</author><pubDate>Mon, 26 Dec 2011 17:25:16 +0800</pubDate><description><![CDATA[范例（Examples）

 

本例从两个classes开始，代表「人」的Person和代表「部门」的Department：

                                       

 class Person {

   Department _department;

 

   public Department getDepartment() {]]></description><category></category></item><item><title><![CDATA[关于冗余类]]></title><link>https://blog.youkuaiyun.com/jiqikewang/article/details/7103545</link><guid>https://blog.youkuaiyun.com/jiqikewang/article/details/7103545</guid><author>jiqikewang</author><pubDate>Mon, 26 Dec 2011 17:09:41 +0800</pubDate><description><![CDATA[首先吐槽一下，优快云最近的登录很慢很不爽啊。
以下几个方面需要注意，其实说的就是多态时候的关于继承的几个小点，不管是值域还是方法，如果只有子类中单独几个用，不要放在父类里面，以免增加所有子类的对象大小。
直接上图：






        我靠，图片都不让贴了，今天下午可是气死我了。
      算了，就是上面说的那几点，不要使子类冗余，也不要使父类冗余。（似乎是废话）]]></description><category></category></item><item><title><![CDATA[类型码，似乎是对于构造成java枚举类似的应用。]]></title><link>https://blog.youkuaiyun.com/jiqikewang/article/details/7103502</link><guid>https://blog.youkuaiyun.com/jiqikewang/article/details/7103502</guid><author>jiqikewang</author><pubDate>Mon, 26 Dec 2011 16:58:11 +0800</pubDate><description><![CDATA[在使用Replace Type Code with Class 之前，你应该先考虑type code 的其他替换方式。只有当type code 是纯粹数据时（也就是type code 不会在switch 语句中引起行为变化时），你才能以class 来取代它。Java 只能以整数作为switch 语句的「转辙」依据，不能使用任意class ，因此那种情况下不能够以class 替换type code]]></description><category></category></item><item><title><![CDATA[引入参数对象]]></title><link>https://blog.youkuaiyun.com/jiqikewang/article/details/7097798</link><guid>https://blog.youkuaiyun.com/jiqikewang/article/details/7097798</guid><author>jiqikewang</author><pubDate>Fri, 23 Dec 2011 12:46:24 +0800</pubDate><description><![CDATA[这个方法其实就是说：如果某些（2个或者两个以上）在2个或者多个函数里同时出现，这就是数据泥团，应该包装一下。

你常会看到特定的一组参数总是一起被传递。可能有好几个函数都使用这一组参数，这些函数可能隶属同一个class，也可能隶属不同的classes 。这样一组参数就是所谓的Date Clump （数据泥团）」，我们可以运用一个对象包装所有这些数据，再以该对象取代它们。哪怕只是为了把这些数据组]]></description><category></category></item><item><title><![CDATA[Divergent Change & shotgun Surgery & Inline Class & Feature Envy]]></title><link>https://blog.youkuaiyun.com/jiqikewang/article/details/7097776</link><guid>https://blog.youkuaiyun.com/jiqikewang/article/details/7097776</guid><author>jiqikewang</author><pubDate>Fri, 23 Dec 2011 11:32:07 +0800</pubDate><description><![CDATA[希望软件能够容易被修改，针对某一外界变化的所有的相应修改，都只应该发生在单一的类中。

Shotgun Surgery类似Divergent Change，但恰恰相反。如果每遇到某种变化，你都必须在许多不同的classes内做出许多小修改以响应之，你所面临的坏味道就是Shotgun Surgery。如果需要修改的代码散布四处，你不但很难找到它们，也很容易忘记某个重要的修改。

这种情况下你]]></description><category></category></item><item><title><![CDATA[过长参数列表  &  函数取代参数  & Inline Method]]></title><link>https://blog.youkuaiyun.com/jiqikewang/article/details/7096097</link><guid>https://blog.youkuaiyun.com/jiqikewang/article/details/7096097</guid><author>jiqikewang</author><pubDate>Thu, 22 Dec 2011 17:23:23 +0800</pubDate><description><![CDATA[例子：
源代码： public double getPrice() {

      int basePrice = _quantity * _itemPrice;

      int discountLevel;

      if (_quantity > 100) discountLevel = 2;

      else discountLevel = 1;

      doubl]]></description><category></category></item><item><title><![CDATA[坏味道之3 过大类 & Extract class & Move Method & Encapsulate Field & Self Encapsulate Field]]></title><link>https://blog.youkuaiyun.com/jiqikewang/article/details/7095350</link><guid>https://blog.youkuaiyun.com/jiqikewang/article/details/7095350</guid><author>jiqikewang</author><pubDate>Thu, 22 Dec 2011 16:55:45 +0800</pubDate><description><![CDATA[对于类，如果想要用单一类做太多的事情，就会出现太多的instance变量


通常如果class内的数个变量有着相同的前缀或字尾，这就意味有机会把它们提炼到某个组件内。



Extract class
  
某个class做了应该由两个classes做的事。

建立一个新class，将相关的值域和函数从旧class搬移到新class。




如果某些数据和某些函]]></description><category></category></item><item><title><![CDATA[剖解临时变量]]></title><link>https://blog.youkuaiyun.com/jiqikewang/article/details/7095265</link><guid>https://blog.youkuaiyun.com/jiqikewang/article/details/7095265</guid><author>jiqikewang</author><pubDate>Thu, 22 Dec 2011 14:34:56 +0800</pubDate><description><![CDATA[如果某个临时变量被赋值超过一次，并且它既不是循环变量，也不是集用临时变量。



。「循环变量」和「集用临时变量」就是两个典型例子：
循环变量（loop variables ）[Beck]会随循环的每次运行而改变〔例如for (int i=0; i
集用临时变量（collecting temporary variable）[Beck]负责将「通过整个函数的运算」而构成的某个值收集起来。]]></description><category></category></item><item><title><![CDATA[何时提炼函数 & 用查询取代临时变量]]></title><link>https://blog.youkuaiyun.com/jiqikewang/article/details/7094637</link><guid>https://blog.youkuaiyun.com/jiqikewang/article/details/7094637</guid><author>jiqikewang</author><pubDate>Thu, 22 Dec 2011 11:27:37 +0800</pubDate><description><![CDATA[拥有[短函数」（short methods）的对象会活得比较好、比较长。不熟悉面向对象技术的人，常常觉得对象程序中只有无穷无尽的delegation（委托），根本没有进行任何计算。


我们遵循这样一条原则：每当感觉需要以注释来说明点什么的时候，我们就把需要说明的东西写进一个独立函数中，并以其用途（而非实现手法）命名。我们可以对一组或甚至短短一行代码做这件事。哪怕替换后的函数调用动作比函数自]]></description><category></category></item><item><title><![CDATA[第三章和第六章代码大坏味道          函数过长&Extract Method  （1）]]></title><link>https://blog.youkuaiyun.com/jiqikewang/article/details/7084789</link><guid>https://blog.youkuaiyun.com/jiqikewang/article/details/7084789</guid><author>jiqikewang</author><pubDate>Mon, 19 Dec 2011 17:04:39 +0800</pubDate><description><![CDATA[1：重复的代码（不仅仅是函数里，还有类之间）

Extract Method是我最常用的重构手法之一。当我看见一个过长的函数或者一段需要注释才能让人理解用途的代码，我就会将这段代码放进一个独立函数中。

有数个原因造成我喜欢简短而有良好命名的函数。首先，如果每个函数的粒度都很小（finely grained），那么函数之间彼此复用的机会就更大；其次，这会使高层函数码读起来就像一系列注释；再]]></description><category></category></item><item><title><![CDATA[重构第二章 重构原则]]></title><link>https://blog.youkuaiyun.com/jiqikewang/article/details/7084716</link><guid>https://blog.youkuaiyun.com/jiqikewang/article/details/7084716</guid><author>jiqikewang</author><pubDate>Mon, 19 Dec 2011 16:40:48 +0800</pubDate><description><![CDATA[1：重构，改进软件设计（改进设计的一个重要方向是消除重复代码）
2：重构，使软件更易被理解
3：重构，帮助找到bugs。
4：重构，帮你提高编程速度。


什么时候重构？（三次法则）
1：添加功能时---并重构
2：修补错误时---并重构
3：代码审核时---并重构




总得来所，第二章是一个高层次的抽象章节，内容不多，可以说简单的做了一些概括，比较重要的就是重构的]]></description><category></category></item><item><title><![CDATA[重构第二章]]></title><link>https://blog.youkuaiyun.com/jiqikewang/article/details/7083236</link><guid>https://blog.youkuaiyun.com/jiqikewang/article/details/7083236</guid><author>jiqikewang</author><pubDate>Mon, 19 Dec 2011 10:35:42 +0800</pubDate><description><![CDATA[这一章花费了一些时间才弄明白。
1：state模式（GOF定义：允许一个对象在状态改变时，改变它的行为）
a：如果一个对象的行为取决于它的状态，并且必须在运行时根据状态改变它的行为。
b：一个操作中很多的分支的条件语句，并且根据依赖该对象的状态，状态模式将每一个分支条件放到一个独立的类里。




年前还有大约5周，想要把这本书看完的话，大约每周3章，比较多啊，加油吧！]]></description><category></category></item><item><title><![CDATA[重构学习笔记2（第一章）]]></title><link>https://blog.youkuaiyun.com/jiqikewang/article/details/7076768</link><guid>https://blog.youkuaiyun.com/jiqikewang/article/details/7076768</guid><author>jiqikewang</author><pubDate>Fri, 16 Dec 2011 12:42:54 +0800</pubDate><description><![CDATA[对于重构的学习，其实也是对于面向对象思想的提升锻炼，并且应该找到设计类的时候到底怎么样才能提升扩展性。
第一章，重构的小例子。
第一步：首先是找到代码泥团，也就是一个函数实现了多个功能，比较复杂的地方，抽取方法。
第二步：找到泥团代码的局部变量以及参数；一般来说，不会被修改的变量可以作为函数参数传进来，然后会被修改到，如果只有一个就当作返回值。
第三步：修改抽出来的函数的变量名等，使更加容]]></description><category></category></item><item><title><![CDATA[谜题70：（其实涉及到对于修饰符的一个理解）]]></title><link>https://blog.youkuaiyun.com/jiqikewang/article/details/7070873</link><guid>https://blog.youkuaiyun.com/jiqikewang/article/details/7070873</guid><author>jiqikewang</author><pubDate>Wed, 14 Dec 2011 16:20:35 +0800</pubDate><description><![CDATA[先摘抄java解惑里面的一个谜题下面这个程序设计在不同的包中的两个类的交互，main方法位于hack.TypeIt中。那么，这个程序会打印什么呢？ 
package hack;
import click.CodeTalk;
public class TypeIt {
    private static class ClickIt extends CodeTalk {
        void p]]></description><category></category></item><item><title><![CDATA[谜题72：final相关的几个知识点]]></title><link>https://blog.youkuaiyun.com/jiqikewang/article/details/7070861</link><guid>https://blog.youkuaiyun.com/jiqikewang/article/details/7070861</guid><author>jiqikewang</author><pubDate>Wed, 14 Dec 2011 16:15:30 +0800</pubDate><description><![CDATA[本谜题旨在检验当你试图隐藏一个final域时将要发生的事情。下面的程序将做些什么呢？ 
class Jeopardy {
    public static final String PRIZE = "$64,000";
}

public class DoubleJeopardy extends Jeopardy {
    public static final String PRIZE =]]></description><category></category></item><item><title><![CDATA[不要隐藏变量。]]></title><link>https://blog.youkuaiyun.com/jiqikewang/article/details/7069779</link><guid>https://blog.youkuaiyun.com/jiqikewang/article/details/7069779</guid><author>jiqikewang</author><pubDate>Wed, 14 Dec 2011 11:38:05 +0800</pubDate><description><![CDATA[在下面的程序中，子类的一个域具有与超类的一个域相同的名字。那么，这个程序会打印出什么呢？ 
class Base {
    public String className = "Base";
}

class Derived extends Base {
    private String className = "Derived";
}

public class PrivateMatter]]></description><category></category></item><item><title><![CDATA[不要使用基于减法的比较器]]></title><link>https://blog.youkuaiyun.com/jiqikewang/article/details/7069682</link><guid>https://blog.youkuaiyun.com/jiqikewang/article/details/7069682</guid><author>jiqikewang</author><pubDate>Wed, 14 Dec 2011 11:15:56 +0800</pubDate><description><![CDATA[下面的程序使用定制的比较器，对一个由随机挑选的Integer实例组成的数组进行排序，然后打印了一个描述了数组顺序的单词。回忆一下，Comparator接口只有一个方法，即compare，它在第一个参数小于第二个参数时返回一个负数，在两个参数相等时返回0，在第一个参数大于第二个参数时返回一个整数。这个程序是展示5.0版特性的一个样例程序。它使用了自动包装和解包、泛型和枚举类型。那么，它会打印出什么呢]]></description><category></category></item><item><title><![CDATA[Math.abs()方法不一定总是返回整数]]></title><link>https://blog.youkuaiyun.com/jiqikewang/article/details/7069649</link><guid>https://blog.youkuaiyun.com/jiqikewang/article/details/7069649</guid><author>jiqikewang</author><pubDate>Wed, 14 Dec 2011 11:10:03 +0800</pubDate><description><![CDATA[下面的程序将生成整数对3取余的柱状图，那么，它将打印出什么呢？ 
public class Mod {
    public static void main(String[ ] args) {
        final int MODULUS = 3;
        int[] histogram = new int[MODULUS];
        // Iterate over al]]></description><category></category></item><item><title><![CDATA[日期谜题（也暴露了Java）设计中不大好的两个类库]]></title><link>https://blog.youkuaiyun.com/jiqikewang/article/details/7069538</link><guid>https://blog.youkuaiyun.com/jiqikewang/article/details/7069538</guid><author>jiqikewang</author><pubDate>Wed, 14 Dec 2011 10:48:21 +0800</pubDate><description><![CDATA[下面的程序演练了Date和Calendar类的某些基本特性，它会打印出什么呢？ 
import java.util.*;
public class DatingGame {
    public static void main(String[ ] args) {
        Calendar cal = Calendar.getInstance();
        cal.set(1999]]></description><category></category></item></channel></rss>