重构——62提炼子类(Extract Subclass)

提炼子类(Extract Subclass)

类中的某些特性只被某些实例用到;新建一个子类,将上面所说的那一部分特性移到子类中

一、动机

你发现类中的某些行为只被一部分实例用到,其他实例不需要它们

二、做法

1、为源类定义一个新的子类

2、为这个新的子类提供构造函数

3、找出调用超类构造函数的所有地点。如果它们需要的是新建的子类,令它们改而调用新的构造函数

4、逐一使用Push Down Method和Push Down Field将源类特性移到子类去

5、Replace Conditional with Polymorphism

6、每次下移后,编译并测试

时间: 2024-10-10 09:39:42

重构——62提炼子类(Extract Subclass)的相关文章

重构——12提炼类(Extract Class)

提炼类(Extract Class) 并发和事务的风险:某个类做了两个类做的事:建立一个新类,将相关的字段和函数从旧类搬移到新类 一.动机 1.让类的抽象更清楚,让类的责任更明确 2.如果某些数据和函数总是一起出现,某些数据经常同时变化甚至彼此相依,这就表示你应该将它们分离出去 3.子类化的时候你发现某些特性需要以一种方式来子类化,另外一些特性需要以另一种方式子类化,这就意味着你需要分解原来的类 二.做法 1.决定如何分解类所负的责任 2.建立一个新类,用以表现从旧类分离出来的责任 3.建立从"

重构——63提炼超类(Extract Superclass)

提炼超类(Extract Superclass) 两个类有相似特性:为这两个类建立一个超类,将相同的特性搬移到超类 一.动机 减少重复代码 二.做法 1.为原本的类新建一个空白的抽象超类 2.运用Pull Up Field,Pull Up Mehtod,Pull Up Constructor Body逐一将子类的共同元素上移到超类 3.每次上移后,编译并测试 4.检查留在子类中的函数,Extract Method,Pull Up Method,也许可以Form Template Method 5

重构——64提炼接口(Extract Interface)

提炼接口(Extract Interface) 若干客户使用类接口中的同一子集,或者两个类的接口有部分相同:将相同的子类提炼到一个独立接口中 一.动机 1.接口对于java程序的设计方式有着巨大的影响 2.如果某个类在不同环境下扮演截然不同的角色,使用接口就是个好主意 二.做法 1.新建一个接口 2.在接口中声明待提炼类的共通操作 3.让相关的类实现上述接口 4.调整客户端的类型声明,令其使用该接口

重构——72提炼继承体系(Extract Hierarchy)

提炼继承体系(Extract Hierarchy) 你有某个类做了太多工作,其中一部分工作以大量条件表达式完成 建立继承体系,以一个子类表示一种特殊情况 动机 渐进式设计

重构——1提炼函数(Extract Method)

提炼函数(Extract Method) 你有一段代码可以被组织在一起并独立出来,将这段代码放进一个独立的函数中,并让函数名称解释该函数的用途. 一.动机 1.每个函数的粒度都小,那么被复用的几率就大 2.函数的长度不是问题,关键在于函数名称和函数本体之间的语义距离 3.使高层函数读起来向一系列注释 4.如果函数都是细粒度,那么函数覆盖也会更容易些 二.做法 1.创建函数,名字要起好 2.转移代码 3.检查提炼出的代码是否引用了作用域限于原函数的变量(临时变量和源函数参数) 4.检查是否有任何的

重构——31以子类取代类型码(Replace Type Code with SubClass)

以子类取代类型码(Replace Type Code with SubClass) 你有一个不可变的类型码,它会影响类的行为:以子类取代这个类型码 一.动机 1.借助多态来处理变化行为,标志就是switch if-then-else 2.把对不同类行为的了解从类用户那儿转移到了类自身 二.做法 1.使用Self Encapsulate Field将类型码自我封装起来 2.为类型码的每一个数值建立一个相应的子类.在每个子类中覆写类型码的取值函数,使其返回相应的类型码值 3.每建立一个新的子类,编译

关于子类化(subclass)的超高难度问题,大家帮看看怎么实现

问题描述 普通的子类化一个控件,我知道怎么实现//Win32APIneeded[DllImport("user32")]privatestaticexternIntPtrSetWindowLong(IntPtrhWnd,intnIndex,Win32WndProcnewProc);[DllImport("user32")]privatestaticexternintCallWindowProc(IntPtrlpPrevWndFunc,IntPtrhWnd,intMs

《重构与模式(修订版)》目录—导读

版权声明 重构与模式(修订版) Authorized translation from the English language edition, entitled: Refactoring to Patterns, 978-0-321-21335-8 by Joshua Kerievsky, published by Pearson Education, Inc., publishing as Addison- Wesley Professional, Copyright 2005 Pears

代码重构(五):继承关系重构规则

陆陆续续的发表了多篇关于重构的文章了,还是那句话,重构是一个项目迭代开发中必不可少的一个阶段.其实重构伴随着你的项目的整个阶段.在前几篇关于重构的文章中我们谈到了函数的重构.类的重构.数据的重构以及条件表达式的重构,那么今天咱们就来聊聊继承关系的重构.当然还是延续前几篇博客的风格,我们在博客中的代码实例依然使用Swift语言来实现,当然还是那句话,使用什么语言无所谓,关键是看重构的场景以及重构的思想. "重构"不仅仅可以改善你既有的代码设计,还可以改变你组织代码的思路,使你的程序在设计