单一职责
一个类只负责一项职责,不应该承担太多的职责;
如果承担的职责多了,一个职责的变化可能会影响这个类实现其他的职责;
换句话说:
一个类只应该完成和一个职责相关的业务,不要让一个类承担过多的职责;
一般来说一些简单的职责,可以让一个类兼任,但是复杂的职责必须的独立

开闭原则
当应用的需求发生改变的时候,在不改变其源代码的前提下,可以扩展模块的功能;
换句话说:
软件实体应该面向修改进行关闭,面向扩展进行开放
通过接口或者抽象类将相同的代码进行封装,便于重用,这就是关闭
把不同的代码抽取出来,便于功能的扩展,这就是开放
开闭原则是设计原则的核心原则,其他的设计原则都是开闭原则的体现和补充

聚合/组合复用原则
在代码复用的时候,要尽量先考虑使用聚合或组合关联关系来实现,其次才考虑使用继承关系来实现;
继承在java中只能单根继承,不能通过继承实现多个类的代码复用,但是,聚合/组合可以

迪米特原则
迪米特原则要求 限制实体类之间的通信;
就是不要因为一个类业务的变化而导致另一类变化;
正确的使用迪米特原则还有两个优点:
1.降低类之间的耦合度,提高模块之间的独立性
2.由于耦合度降低,从而提高类的可复用率和系统的可扩展性

依赖倒置原则
依赖倒置原则是实现开闭原则的重要途径之一,它降低了客户与实现模块的耦合;
在软件设计中,实现类具有多变形,而接口就则稳定的多,因此使用接口就是制定好规范,不去涉及操作,把具体交给实现类完成;
换句话说:
通过面向接口编程来降低类之间的耦合;

里式替换原则
里式替换原则讲的是有关继承的一些原则,就是什么时候应该使用继承,什么时候不该使用继承,它反映的是父类和子类之间的关系;
父类出现的地方子类一定可以替换,如果父类的方法在子类中不适合,就应该断开父子关系;
通俗的讲,子类可以扩展父类的功能,但不能改变父类原有的功能,因为父类的方法子类是无条件继承的,父类的方法子类不一定就适用,如果强行使用,它的复用性也会变得较差;

接口隔离原则

为各个类建立它们需要的专用接口,而不是去建立一个很庞大的接口供所有的依赖它的类使用,当然接口的粒度大小要合理,如果定义的过小,则会造成接口数量过多,使设计复杂化;如果定义的太大的话,灵活性就降低了;
换句话说:
使用专门的接口要比统一的接口要好,便于项目的组织和分工,不要让开发者去面对自己用不到的方法;