设计模式本人比较倾向于敏捷开发的时候最好用(大神请忽略),总体设计比较倾向于自顶向下的设计。
设计模式主要是根据设计原则在不同场景的使用经验的出来的,我们站在巨人的肩膀上来看看吧。
http://c.biancheng.net/design_pattern/
本人面试问的最多的是:什么是面向对象,讲讲你的理解?往往很少人能说好,只能说面向对象有三大特征:封装、继承、多态。背过无数次深入想过可能一次都没有。
谈谈本人经验的理解(如有更好的说法,请留言)。面向对象是一个高度的概括,延伸出的问题我们采用5W原则来思考:
面向对象是什么?
面向对象是一个高度概括的词。万物皆为对象。那么面向对象,可以是面向行为、面向场景、面向事件、面向事物甚至是面向项目等。强调的是目标,只有在复杂问题中抽出目标才能够知道到底做的是什么东西。才能真正的是面向对象了。
谁面向对象?
谁面向对象,主要是强调相互作用关系。万物皆有关系,就像万有引力一样。系统类的对象没有关系就没法运作。这是一个反向思维,从系统找使用者,需求分析阶段重点(使用者面向系统)。以使用者为对象来,那么系统就是来反应功能的(系统面向使用者)。以接口为对象,那么就是基础类来使用(基础类面向接口)。以事件为对象,那么就是触发事件的行为(行为面向事件)等
什么时候面向对象?
强调对象的生命周期。每个对象在系统运行的各个阶段有不同的表现。什么时候需要对象,什么时候消耗对象,显得尤为重要。
在哪里面向对象?
强调的是对象角度。在代码级别就是模块之间,系统级别可能就是服务器之间。看问题角度不一样。
如何面向对象?
强调面向对象方式:观察刻画,行为驱动等。
在基础认知上面,加了一些原则主要是为了应对变化,更加契合语言程序,不再是天马行空没有方向。
开闭原则(最佳):
可以通过“抽象约束、封装变化”来实现开闭原则,即通过接口或者抽象类为软件实体定义一个相对稳定的抽象层,而将相同的可变因素封装在相同的具体实现类中。
里氏替换原则(不能做到完全开闭那就妥协,控制权限)
通俗来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能。也就是说:子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法。
依赖倒置原则(部分方法必须对外开放,但是都不能让他来继承,继承后就会拥有属性和方法。再次妥协加接口)
目的是通过要面向接口的编程来降低类间的耦合性,所以我们在实际编程中只要遵循以下4点,就能在项目中满足这个规则。
单一职责原则(可继承,可实现带来功能无处不在,没法管理。加强管理原子性,类统一自己具备功能)
核心就是控制类的粒度大小、将对象解耦、提高其内聚性。如果遵循单一职责原则将有以下优点。
接口隔离原则(可实现,带来到处都可以访问,没法管理。加强管理原子性,加强接口约束、降低类和接口信息交互)
接口隔离原则是为了约束接口、降低类对接口的依赖性。
迪米特法则(权限管理,生命周期管理)
要求限制软件实体之间通信的宽度和深度