序:
什么是设计模式?
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
设计模式是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。
用生活推敲出这个概念:淘宝的经营模式,京东的经营模式。两者基本上可以代表了目前电商所有的经营模式。其它的经营模式也是在这两者的模式上面做了改进。为什么它们会成为模板呢?简单的来说:他们赚钱多,效益好,效率高。大家都以他们为基准取长补短。
为什么使用设计模式?
为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构(通常我们看到盖楼,是先下框架,在灌水泥。设计模式就好像下的框架一样。下好框架可能会让后续装饰的成本更低,并且更加牢固。但是如果框架搭建的不好,可能导致事倍功半)一样。
1.常见的设计模式
java人员一谈到设计模式,可能就会浮现出23这个数字。
下面是对于23中设计模式的一个概述清单:
创建型模式,共五种:
工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:
适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:
策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
两类特殊的模式:
并发型模式和线程池模式。
2.设计模式六大原则
根据设计模式的6大基本原则也做了一个demo,git地址:https://github.com/startYao/25-years-old-effort-basics-demo-01.git
a、单一职责原则
什么是单一职责,用通俗一点的例子来描述就是 做好自己的事,少管闲事 。
每个类都应该有一个单一的功能,并且该功能应该由这个类完全封装起来。也就是高内聚。描述的意思是每个类都只负责单一的功能,切不可太多,并且一个类应当尽量的把一个功能做到极致。
b、里氏替换原则(LSP)
一个子类应该可以替换掉父类并且可以正常工作。
子类一般不该重写父类的方法,父类的方法一般都是对外公布的接口,有不可变性的,不该变化的东西给修改掉。
总之:父类可以出现的地方,一定可以用它的子类替换掉。
怎么样做,才能符合LSP呢? 尽量不要从可实例化的父类中继承,而是要使用基于抽象类和接口的继承。
c、开闭原则
修改关闭,扩展开放
软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的。
d、依赖倒置原则
针对接口编程,不针对实现编程。
依赖倒置原则的好处很明显,当需求变更的时候,我们可以很灵活的进行扩展,而不用破坏开闭原则。
e、迪米特原则
最小知道原则,一个类应该尽量不要知道其他类太多的东西,不要和陌生的类有太多接触。
f、接口隔离原则
接口最小化原则
比如设计一个手机接口时,手机哪些行为是必须的,接口尽量的小
比如说,手机和智能机。可以手机一个接口,智能机一个接口。并不是所有的手机都满足智能机