设计模式是什么
来源:互联网 发布:java classpath 设置 编辑:程序博客网 时间:2024/04/28 01:18
什么是设计模式
设计模式有甚多不同的表述:
设计模式是一种对问题本质的通用解决方案。
从设计或重构的角度来讲:
设计模式是对软件中可变性封装的通用的框架(可变性是软件中容易变化的部分)。
软件设计的目标是可扩展性,可插入性,灵活性。
可扩展性:新的功能可以很容易的加入到系统中去。
可插入性:可以很容易的将一个类抽出去,同时将另外一个有同样接口的类加入进来。
灵活性:可以允许平稳的修改代码,而不会涉及到很多的其他模块。
软件中不可避免的含有很多可变性,为了实现软件设计的目标,必然要对可变性做封装。
如何对这种可变性做封装呢?
封装必须遵照一定的原则:
1,一种可变性不应当散落在代码的很多地方,而应当被封装在一个对象里面。
同一种可变性的不同表象意味着同一个继承等级结构中的不同子类!
2.一种可变性不应当与另外一种可变性混合在一起。
基于这2个原则,任何人都可以在自己的系统中封装可变性,但是封装的好坏见仁见智。
但是一个良好的封装应当遵守6个原则。
设计模式6大原则
开闭原则:
一个软件应当对扩展开放,对修改关闭。
里氏代换原则:
任何基类出现的地方,子类一定可以出现。
依赖倒转原则:
要依赖于抽象,不要依赖于实现。开闭原则是目标,依赖倒转原则是实现开闭原则的手段。
合成/聚合复用原则:
要尽量使用合成/聚合,而不是继承关系达到复用的目的。
迪米特法则:
一个实体(事物在软件中的抽象,比如一个Person类表示一个人,也是一个实体)应当尽可能少的与其他实体相互作用。
接口隔离原则:
应当提供单独的专业的接口而不是大而全的总接口。
以下是各个原则对应的体现的比较明显的设计模式:
开闭原则-策略模式
里氏代换原则-代理模式,策略模式
依赖倒转原则-工厂方法模式,模板方法模式
接口隔离原则-备忘录模式(服务定制)
合成/聚合复用原则-代理模式等
迪米特法则-门面模式,调停者模式
21种设计模式归为三大类,创建模式,结构模式,行为模式
创建模式
创建模式是对类的实例化过程的抽象化。是对实例创建可变性的封装。
一些系统在创建对象时,需要动态决定怎么创建对象,创建那些对象,如何组合和表示这些对象。
创建模式描述了怎样构造和封装这些动态的决定。
创建模式分为类的创建模式和对象的创建模式2种。
主要的设计模式有:简单工厂模式,工厂方法模式,抽象工厂模式,单利模式,多例模式,建造模式,原型模式。
结构模式
描述如何将类或者对象结合在一起形成更大的结构。是对类或对象之间的组合可变性的封装。
分为类的结构模式和对象的结构模式2种。
主要有:适配器模式,缺省适配模式,合成模式,装饰模式,代理模式,享元模式,门面模式,桥梁模式。
行为模式
是对不同的对象之间责任划分和算法的抽象化。即是对责任划分过程或算法的可变性的封装。
分为类的行为模式和对象的行为模式
类的行为模式使用继承关系在几个类之间分配行为或责任。
对象的行为模式则使用对象的聚合来分配行为或责任。
主要有:不变模式,策略模式,模板方法模式,观察者模式,迭代子模式,责任链模式,命令模式,备忘录模式,状态模式,访问者模式,解释器模式,调停者模式。
学习设计模式的时候一定要问自己一个问题:
这个设计模式封装了什么可变性(这个设计模式允许那个部分变化),为了封装这个可变性付出了什么代价?
- GoF是什么----设计模式
- web设计模式是什么?
- 设计模式是什么?
- 设计模式是什么?[转]
- 设计模式是什么
- 设计模式是什么?
- 设计模式是什么
- 设计模式是什么
- 设计模式是什么?
- 「设计模式」是什么?
- java的设计模式,是什么?
- 设计模式之 概览(设计模式是什么 设计模式分类)
- [转译]MVC设计模式或MVP设计模式-区别是什么?
- MVC设计模式或MVP设计模式-区别是什么?
- Cocos2d-x3.2与设计模式(零)设计模式是什么
- 设计模式是什么(对设计模式的理解)
- 设计模式的本质是什么(转)
- 设计是什么?
- eclipse优化
- C++template--函数模版
- 在 Windows 下安装 WAMP(Apache、MySQL、PHP)详细图文教程
- 网上开店卖什么好选择爱源做成人用品网店代理[云动力网商平台613601960]
- Hello Openlayers
- 设计模式是什么
- CF380C Sereja and Brackets [想法+线段树]
- 在 Windows 下安装 WAMP(Apache、MySQL、PHP)详细图文教程
- 数据的标准化与中心化以及R实现
- java中Class对象详解
- Codeforces 144D. Missile Silos【dijkstra】
- DevExpress DateEdit控件选择精确到秒
- 关于www和一级域名、二级域名的认识误区
- Insert Interval 插入区间