Java的设计模式和6大原则
什么是设计模式?
设计模式(Design pattern) 是解决软件开发某些特定问题而提出的一些解决方案也可以理解成解决问题的一些思路。通过设计模式可以帮助我们增强代码的可重用性、可扩充性、 可维护性、灵活性好。我们使用设计模式最终的目的是实现代码的 高内聚 和 低耦合。
什么是高内聚和低耦合?
举例一个现实生活中的例子,例如一个公司,一般都是各个部门各司其职,互不干涉。各个部门需要沟通时通过专门的负责人进行对接。在软件里面也是一样的 一个功能模块只是关注一个功能,一个模块最好只实现一个功能。这个是所谓的内聚,模块与模块之间、系统与系统之间的交互,是不可避免的, 但是我们要尽量减少由于交互引起的单个模块无法独立使用或者无法移植的情况发生, 尽可能多的单独提供接口用于对外操作, 这个就是所谓的低耦合
设计模式的分类
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
设计模式的6大原则?
1. 开闭原则(Open Close Principle)
开闭原则就是说对扩展开放,对修改关闭。
对软件实体的改动,最好用扩展而非修改的方式。如果要修改代码,尽量用继承或组合的方式来扩展类的功能,而不是直接修改类的代码。
2. 里氏代换原则(Liskov Substitution Principle)
尽量把父类设计为抽象类或者接口,让子类继承父类或实现父接口,子类可以扩展父类的功能,但不能改变父类原有的功能。
- 老爸能干的事情,儿子都能干。
- 但是儿子能干的事情老爸不一定能干。
里氏代换原则是开闭原则的具体实现手段之一。
3. 依赖倒转原则(Dependence Inversion Principle)
要依赖抽象,不要依赖具体类。这个和针对接口编程, 而不是面向实现编程很像。但是它更强调抽象。这个原则是不能让高层组件依赖底层组件,而且高层组件和低层组件都应该依赖抽象。摘抄自 【Head First 设计模式】
面向接口编程 而不是面向实现编程,
这里的接口不一定就是我们程序中的接口也可以是抽象类。
Animal dog1 = new Dog();//面向接口
Dog dog2 = new Dog();//面向实现
4. 迪米特法则(最少知道原则)(Demeter Principle)
一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。
5. 单一职责原则(Single Responsibility Principle)
一个类只承担一个职责,千万不要让一个类干的事情太多。
6. 接口隔离原则(Interface Segregation Principle)
接口最小化。接口中的方法应该尽量少。和单一职责原则类似
* 单一职责针对的是类,
* 接口隔离针对的是接口