oo设计原则
- 最少知识原则,只和朋友交谈。该原则要求减少对象之间的交互。具体指的是只调用本对象中的成员变量的方法、当作参数传进来的对象的方法,和本方法中创建的对象的方法。
总结来说,就是对方法的调用不超过两个“.”。这样做的好处是减少各类间的依赖。缺点是会产生很多“包装类”,因为不能直接太多“.”去调用方法,只能在直接相关的对象中包装一些方法去实现需求。
- 单一职责原则。做人要专一, 类也一样。一个类应该只有一组功能,只有一个引起变化的原因。只将一个责任指派给一个类是很困难的。这个原则可以保证模块的高内聚
设计模式
- 适配器模式。适配器模式有两种形式,分别是类适配器和对象适配器,由于java中不能用多重继承,所以我们讨论的是对象适配器。适配器模式承担着转换接口的作用。假设客户需要用到某一种接口,我们拥有类似功能但是不是客户所期待的接口,这个时候适配器就起作用了。适配器通过实现这两种接口,让目标接口去委托被适配者实现相应的功能,从而达到转换接口的作用。
- 外观模式。外观模式提供了一个统一的接口,用来访问子系统中的一群接口。实质也就是对子系统的高层抽象,可以让客户不用理会诸多子系统的繁琐操作,直接去操作高层接口就行了,这样可以让子系统更容易使用。如开车一事,先要开启电源,再放手刹,再踩油门等动作,而外观模式将这个抽象为开车,直接操作这个接口就可以启动车辆了。
- 模板方法模式。在一个方法中定义算法的骨架,而将算法的某些步骤延迟到子类中。工厂方法是特殊模板方法。一般来说,这个模式是各类框架的基础。模板方法中会存在一类特殊的方法,叫钩子方法。这个方法可以什么都不做,又或者去控制算法的流程,具体实现由子类覆盖。
- 组合模式。组合模式通过将对象组合成树形结构来表现“整体/部分”层次关系,能让客户以一致的方式处理个别对象及其对象组合。这个定义有点抽象。我来举个例子。一个文件系统,里面有文件夹对象,有文件对象。其中文件夹这样含有其他对象的称为组合对象,文件称为叶节点对象。通过抽象出一个统一的接口,让文件夹和文件继承这个接口,从而我们可以把整个文件树看成统一的一个整体,客户可以用一致的方式处理文件夹和文件,而不用去判断这是文件夹然后执行这个动作,那是文件,所以又得执行另外的动作。也就是说我们实现了透明性,客户无需知道到底是什么东西,只管按一种方式操作就行了。通常,这样是违背单一职责原则的,因为抽象类中其实担负着两种职责。取舍。