设计模式的描述,或者来源
设计模式在我的理解就是风格和解决问题的思路。
把代码抽象成我们的生活,跟不同的代码打交道就相当于跟不同的人去交流,如果我们一个是说普通话,一个说方言,沟通起来是相对较难的,都说普通话方便理解。--风格
写代码的过程其实就是解决问题的过程,无论是网站还是程序,大多是其实就是处理数据,传输数据。相对于我们从0开始解决一个功能,借鉴别人的思路去解决相同类型的问题更加的快捷,方便。
设计模式的优点
- 提供了程序之间共享的概念,更好的理解彼此之间的意图
- 有经过验证的解决方案,可以提高软件的可维护行,可复用性和领过行
- 促进代码的重复利用
- 遵循设计模式可以减少系统中的错误和问题,提高代码质量。
设计模式的划分
-
创建型模式
- 工厂模式
- 抽象工厂模式
- 单例模式
- 建造者模式
- 原型模式
- 结构型模式
- 适配器模式
- 桥接模式
- 过滤器模式
- 组合模式
- 装饰器模式
- 外观模式
- 享元模式
- 代理模式
- 行为型模式
- 责任链模式
- 命令模式
- 解释器模式
- 迭代器模式
- 中介者模式
- 备忘录模式
- 观察者模式
- 状态模式
- 空对象模式
- 策略模式
- 模版模式
- 访问者模式
- J2EE 型模式
- mvc 模式
- 业务代表模式
- 组合实体模式
- 数据访问模式
- 前端控制器模式
- 拦截过滤器模式
- 服务定位模式
- 传输对象模式
设计模式的六大原则
- 开闭原则
- 我的理解就是提倡扩展,关闭修改。怎么去理解这句话,从做什么,怎么做,结果是什么的方向去理解。程序需要拓展的时候(做什么),不能去修改原有的代码,(怎么做)实现一个热插拔的效果(结果是什么)。什么是热插拔?这是电气里面的概念,说的是通电的情况下我们能做到设备的安装和移除,如何提现到我们程序里面就是,我们做程序的拓展的时候,拓展的内容要能用,而已不影响之前的功能。目的使程序的扩展性好,易于维护和升级。具体使用接口和抽象类去实现这样的效果。
- 里氏代换原则
- 子类必须能够替代他们的父类(基类),并且经过替换之后,代码能够正常的工作。举例程序中每一个类型A的对象a1,都存在一个类型B的对象b1,在所有针对B编写的程序中用a1去替换b1,程序的行为和功能都不变,可以称为A是T的子类型,这样还不理解的话就是数学中的经典案例,正方形和长方形,正方形就是长宽相等的长方形,我们用正方形去替换长方形,合不合理,用子类去替换父类是不是也就不会有什么问题。
- 依赖倒转原则(后期要在修改,目前我是这样理解的)
- 我自己是这样理解的,越上层的东西越是概念化(抽象)的东西,具体的实现是依赖于抽象的,不是凭空产生的,要有一定的逻辑。
- 接口隔离原则
- 就是使用多个隔离的接口,降低类之间的耦合,不同的类不是继承与不同的接口,保证接口之间的隔离,等同于保证类之间的隔离
- 迪米特法原则-最少知道原则
- 一个实体尽量减少与其他实体之间发生相互作用,使用系统功能模块相对独立
- 合成复用原则
- 尽量使用合成/聚合的方式,而不是使用继承
合成复用原则解释:我刚开始的时候不太清楚-合成/聚合-的概念,我这里做了个解释。既然他们放在一起比较,说明在使用的时候,关于这一点我们可以从理解继承的概念出发去理解,合成/聚合。继承就是子类继承父类,能完整重用父类的属性和方法,并且能扩展自身的属性和方法。那么从这一点出发,那合成/聚合的意思不就是,复用代码和拓展自身的功能,既然如此为什么不使用继承而是选择合成/聚合,那肯定是继承有缺点了!继承的缺点是1.无法通过继承达到多个类代码的重用。2.父类的方法子类无条件继承,很容易造成方法污染。3.从父类继承的方法,是一种静态的复用。不能再运行时发生改变,不够灵活。而且使用继承必须满足两个条件:1.父类中所有的属性和方法,在子类中都适用。2.子类不需要再去重用别类中的代码。如果不能满足这两个条件,那么就应该使用聚合/组合关系去替代继承,来达到代码的复用。