1 面向对象编程的核心思想是针对接口编程而不是针对实现编程。只要订好了接口就是许下了承诺是不容许轻易更改的。
2 单一职责原则,一个类因该只有一个原因引起他的改变,所以其实现的功能要尽量的单一。
如经典的 MVC设计模式,其基本流程:用户与视图交互,视图接受并反馈用户的动作,视图将相应的请求的请求转给相应的控制器,由控制器来决定调用哪一个模型,然后由模型来调用相应的业务逻辑来对用户的数据进行加工处理,如果需要返回数据,模型会将数据返回给控制器,由控制器调用相应的视图,最终由视图格式化和渲染返回的数据。 各司其职,非常完美。
3 所谓开闭原则有一个很经典的解答:天庭上的官职是一个萝卜一个坑,官职一旦确定了就不能再改变,而如果孙悟空来了的话就得给它安排一个新的职务。总的来说就是对修改关闭,对扩展开放。 要做到开闭原则就要封装变化,也就是把变化通过接口和抽象类将变化给封装起来,不针对具体实现编程,如果以后需要扩展新的功能,只要实现接口或是继承抽象类就能够覆盖或者扩展新的功能,这样做也不会影响原有的功能,就做到了开闭原则。再比如在android中,对adapter view的实现就很好的实现了开闭原则,定义好了bindView 等几个接口后,client可以根据自己的需要来摆放自己的各个view。再如java中的泛型,简直就是经典。
4李氏替换原则说的是子类一定要能够替代其基类.就像法海的职务是降魔除妖,只要你是妖她就要除,并不管你是个什么妖. 因为不管是白蛇还是青蛇都是蛇妖,也都是妖。不能说因为你是白蛇就不是妖了...
5 迪米特法则(law of demeter)is also named last konwledge principle.。不要和陌生人说话,对于陌生人知道得越少越好。一个模块实现的好坏,从广义上讲就是看该模块从多大程度上将自己的内部数据和实现的细节隐藏起来。应该尽可能少的和其它实体发生相互作用。实现的技巧:在类的划分上要创建弱耦合的类,在类的结构设计上每个类都因该降低成员的访问权限(一开始可以都是private,需要的时候在进行转变);一个类因该尽量设计成不会改变的类;一个类对其它的对象的应用因该降到最低;尽量限制局部变量的作用范围。 在调用方和别调用方之间形成一个抽象层,被调用方在遵守抽象层的前提下可以自由变动。抽象层是调用放的朋友,抽象层负责调用对调用放陌生的被调用者完成任务。
6 合成复用原则更简洁的表述是要尽量使用合成和聚合不要使用继承。使用继承的话就会把父类直接暴露给了子类,违背了信息隐藏的原则,如果超类发生了变化,子类也会跟着变化就导致了耦合,不利于类的扩展复用,
7 工厂模式 简单工厂模式要解决的问题就是如何去实例化一个合适的对象,核心思想是有一个专门的类来负责类的创建的工作。
具体来说,把产品看着是一系列的类的集合,这些类是由某个抽象类或者接口派生出来的一个对象树。而工厂类用来产生一个合适的对象来满足客户的要求。
形象化的解释是用户像一个工厂下单订购一批不同的产品,工厂根据用户的”单“来决定生产什么产品。也就是说有一个接口或是抽象类叫Product,然后concreteProdect 继承这个Product类成为许多不同的产品,然后工厂根据用户下的单来确定生产什么产品。但是简单工厂设计模式违背了开放封闭原则,因为当新增加了一种产品之后,工厂类必须知道这个产品,而且必须知道怎么创建,这就要修改工厂类。所以简单工程是不利于构造总是在变化的系统的。
由于简单工厂不能应对变化,所以有了多工工厂模式,也就是说有一个抽像的工厂,然后具体的工厂继承这个工厂,负责创建具体的类。不过这个多工厂模式的缺点是客户端必须知道需要使用哪一个工厂。
8 单例模式:ensure a class only have one instance,and provide a global point of access to it.
要点:一个类只能有一个实例,他必须自己创建这个实例,他必须向整个系统提供这个实例。
单例模式的使用场景:多个线程之间共享同一个资源或者操作同一个对象
在程序之间使用全局变量,共享资源。
在大型程系统志宏为了性能的考虑,需要节省创建的时间。
9 原型模式:通过将一个原型对象传给那个需要发动创建的对象,这个要发动创建的对象则通过拷贝原型对象的数据来实施创建。