设计模式(Design Pattern)的原则
面向对象有几个原则:开闭原则(Open Closed Principal,OCP)、里氏代换原则(Liskov Substitution Principle,LSP)、依赖倒转原则(Dependency Inversion Principle,DIP)、接口隔离原则(Interfce Segregation Principle,ISP)、合成/聚合复用原则(Composite/Aggregate Reuse Principle,CARP)、最小知识原则(Principle of Least Knowledge,PLK,也叫迪米特法则)。开闭原则具有理想主义的色彩,它是面向对象设计的终极目标。其他几条,则可以看做是开闭原则的实现方法。
设计模式就是实现了这些原则,从而达到了代码复用、增加可维护性的目的。
开闭原则
就是说模块应对扩展开放,而对修改关闭。说白了就是用拓展代替修改,模块应尽量在不修改原(是"原",指原来的代码)代码的情况下进行扩展。
工厂模式是对具体产品进行扩展,有的项目可能需要更多的扩展性,要对这个"工厂"也进行扩展,那就成了"抽象工厂模式"。
假设中关村有一个卖盗版盘和毛片的小子,开发一个光盘销售管理软件,如果有一天,这小子良心发现了,开始卖正版软件。没关系,我们只要再创建一个"光盘"的子类"正版软件"就可以了。不需要修改原结构和代码。
里氏代换原则
里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。原则上子类对象是可以赋给父类对象的,也可以说子类可以替换父类,并且出现在父类能够出现的任何地方.反过来,父类对象是不能替换子类的,这种特性称为里氏替换原则.
最简单的比喻:男人是人是对的,人是男人就错了。
依赖倒转原则
抽象不应该依赖于细节,细节应当依赖于抽象。
要针对接口编程,而不是针对实现编程。
传递参数,或者在组合聚合关系中,尽量引用层次高的类。
主要是在构造对象时可以动态的创建各种具体对象,当然如果一些具体类比较稳定,就不必在弄一个抽象类做它的父类,这样有画蛇添足的感觉
接口隔离原则
定制服务的例子,每一个接口应该是一种角色,不多不少,不干不该干的事,该干的事都要干
最小知识原则
迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。