设计模式与重构汇总

面向对象的基本原则:

单一原则:引起一个类发生变化的原因只有一个

开放封闭原则:对于类的修改是封闭的,而对于类的扩展是开放的

依赖倒置原则:高层不依赖于底层,都应该依赖与抽象;抽象不依赖于细节,细节依赖于抽象;

里氏代换原则:子类可以代替父类出现;


继承是父类、实现是接口;
依赖是方法中的参数用到了别的类,
关联是类中的属性有别的类而且自己不维护,
组合要自己维护属性中其他类的生命周期,
聚合通过构造函数传入实例化好的对象,不再构造方法中实例化


创建型设计模式:单例模式、方法工厂模式、抽象工厂模式、建造者模式、原型模式
建构型设计模式:外观模式、组合模式、装饰器模式、代理模式、享元模式、桥接模式、适配器模式
行为型设计模式:命令模式、解释器模式、责任链模式、访问者模式、观察者模式、中介者模式、迭代模式、模版方法模式、策略模式、状态模式、备忘录模式



代码中常见的“坏味道”:
重复代码、过长的函数、过大的类、过长的参数列表、依恋情结、发散式变化、散弹式修改、数据泥团、基本类型偏执、
夸夸其谈未来性、平行继承体系、switch语句、过度的消息链、中间人、冗赘类、过多的注释、令人迷惑的暂时字段、
狎昵关系、异曲同工的类、不完美的类库、纯稚的数据类、被拒绝的遗赠


/*/*/*/**/*/*/*/*/*/*/*/**/*/*/*/*/*/*重构:
重新组织函数:(在方法中没一个临时变量只能被赋值一次,当然除了那些结果收集型的临时变量)
1.方法提炼 2.方法内联 3.局部变量内联 4.用查询替代局部变量 5.引入解释性临时变量 6.拆分临时变量 7.移除对参数的赋值(把对参数的赋值,改为对临时变量的赋值)
8.以函数对象取代函数 9.替换算法
在对象间搬移特性:
1.搬移方法 2.搬移字段 3.提炼类 4.内联类 5.隐藏委托关系(客户端通过服务对象的字段得到另一个对象,然后调用后者的函数)6.移除中间人 7.引入外加函数 8.引入本地扩展(子类或包装类)
重新组织数据:
1.Self Encapsulate Field(自封装字段) 2.Replace Data Value with Object(以对象取代数据值)
3.Change Value to Reference(以引用对象取代值对象) 4.Change Reference to Value(以值对象取代引用对象)
5.Repalce Array With Object(以对象代替数组) 6.Duplicate Observed Data(复制“被监视变量”) 7.Change Unidirectional Association to Bidirectional(将单向关联改为双向关联)
8.Change Bidirectional Association to Unidirectional(将双向关联改为单向关联) 9.Replace Magic Number with Symbolic Constant(以字面常量取代魔法数) 10.Encapsulate Field(封装字段)
11.Encapsulate Collection(封装集合) 12.Repalce Record with Data Class(以数据类取代记录) 13.Replace Type Code with Class(以类取代类型码) 14.Replace Type Code with SubClass(以子类取代类型码)
15.Replace Type Code with State/Strategy(以 State/Strategy取代类型码) 16. Replace SubClass with Fields(以字段取代子类)
简化条件表达式:
1.Decompose Conditional(分解条件表达式) 2.Consolidate Conditional Expression(合并条件表达式) 3.Consolidate Duplicate Conditional Fragments(合并重复的条件片段)
4.Remove Control Flag(移除控制标记) 5.Replace Nested Conditional with Guard Clause(以卫语取代嵌套条件表达式) 6.Replace Conditional with Polymorphism(以多态取代条件表达式)
7.Introduce Null Object(引入Null对象) 8.Introduce Assertion(引入断言)
简化函数调用:
1.Rename method(函数改名) 2.Add Parameter(添加参数) 3.Remove Parameter(移除参数) 4.Separate Query from Modifer(将查询函数和修改函数分离)
5.Parameterize Moethod(令函数携带参数) 6.Rplace Parameter with Explicit Methods(以明确函数取代参数) 7.Preserve Whole Object(保持对象完整)
8.Replace Parameter with Methods(以函数取代参数) 9.Introduce Parameter Object(引入参数对象) 10.Remove Setting Method(移除设值函数)
11.Hide Method(隐藏函数) 12.Repalce Constuctor with Factory Method(以工厂函数取代构造函数) 13.Encapsulate Downcast(封装向下转型) 14.Replace Error Code with Exception(以异常取代错误代码)
15.Replace Exception with Test(以测试取代异常)
处理概括关系:
1.Pull up Field(字段上移)2.Pull Up Method(函数上移) 3.Pull Up Constructor Body(构造函数体上移) 4.Push Down Method(函数下移) 5.Push Down Field(字段下移)
6.Extract Subclass(提炼子类) 7.Extract Superclass(提炼超类) 8.Extract Interface(提炼接口) 9.Collapse Hierarchy(折叠继承体系) 10.Form TemPalte Method(塑造模版函数)
11.Replace Inheritance with Delegation(以委托取代继承) 12.Repalce Delegation with Inheritance(以继承取代委托)
大型重构:
1.Tease ApartInheritacne(梳理并分解继承体系) 2.Convert Procedural Design to Objects(将过程化设计转化为对象设计)
3.Separate Domain fro Presentation(将领域和表述/显示分离) 4.Extract Hierarchy(提炼集成体系)



  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值