![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 77
sicofield
这个作者很懒,什么都没留下…
展开
-
[设计模式]抽象工厂模式(AbstructFactory)
1.意图 定义了一个创建一系列相关或相互依赖的接口,而无需指定它们的具体类。2.结构与参与者3.效果1) 分离了具体的类(优) 因为工厂封装了创建产品对象的责任和过程(只是用一个return语句返回具体对象),这将客户与类的实现分离。客户通过它们的抽象接口操纵实例。产品的类名也在具体工厂的实现中被分析;它们不出现在客户代码中。2)易于原创 2013-03-06 14:26:22 · 745 阅读 · 0 评论 -
[设计模式]享元模式(Flyweight)
1.意图 运用共享技术有效地支持大量细粒度的对象。2.动机 有些应用程序在其整个设计过程中采用对象技术,但简单化的实现代价极大。 例如,Python等程序中字符串是一个对象。如下面的程序所示,a和b共享了同一个字符串。>>> a="Hello World">>> b="Hello World">>> id(a)14407008>>>原创 2013-03-11 19:26:06 · 989 阅读 · 0 评论 -
[设计模式]命令模式(Command)
1.意图 将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。2.动机 有时必须向某对象提交请求,但并不知道关于被请求的操作或请求的接受者的任何信息。例如,用户界面工具箱包括按钮和菜单这样的对象,它们执行请求响应用户输入。但工具箱不能显示地在按钮或菜单中实现该请求,因为只有使用工具箱的应用知道该由哪原创 2013-03-11 10:34:13 · 695 阅读 · 0 评论 -
[设计模式]责任链模式(Chain of Resposibilty)
1.意图 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。2.动机 好比《大话设计模式上》的请求加薪,需要层层上交批准。这样的话请求者和响应请求者之间强耦合会生成很多判断语句。这里的目的就是要将提交请求的对象和可能提供解决措施的对象解耦。并且这样的方式可以随时修改处理原创 2013-03-11 14:48:30 · 1047 阅读 · 0 评论 -
[设计模式]桥接模式(Bridge)
1.意图 将抽象部分与它的实现部分分离,使它们都可以独立地变化。这里说的意思不是让抽象基类与具体类分离,而是现实系统可能有多角度分类,每一种分类都有可能变化,那么把这种多角度分离出来让它们独立变化,减少它们之间的耦合性,即如果继承不能实现“开放-封闭原则”的话,就应该考虑用桥接模式。如:让“手机”既可以按品牌分类也可以按软件类型分类。2.动机 当一个抽象可能原创 2013-03-11 09:28:33 · 1007 阅读 · 0 评论 -
[设计模式]备忘录模式(Memento)
1.意图 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样就可以将以后的对象状态恢复到先前保存的状态。2.动机 有时有必要记录一个对象的内部状态。为了允许用户取消不确定的操作或从错误中恢复过来,需要实现检查点和取消机制,你必须事先将状态信息保存在某处,这样才能将对象恢复到它们先前的状态。但是对象通常封装了其不封或所有的状态信息,使原创 2013-03-09 09:03:40 · 765 阅读 · 0 评论 -
[设计模式]观察者模式(Observer)
1.意图 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。2.动机 将一个系统分割成一系列相互协作的类有一个常见的副作用:需要维护相关对象间的一致性。我们不希望为了维持一致性而使得各类紧密耦合,因为这样降低了它们的可重用性。 举个例子,一个表格对象和一个柱状图对象还有一个饼图对象,可以描述同原创 2013-03-08 15:06:38 · 1109 阅读 · 0 评论 -
[设计模式]状态模式 (State)
1.意图 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。2.结构与参与者3.适用性 1)一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。 2)一个操作中含有庞大的多分支的条件语句,并且这些分支依赖于该对象的状态。这个状态通常用一个或者多个枚举常量表示。通常,有多个操作包含这一相原创 2013-03-08 12:28:22 · 1177 阅读 · 0 评论 -
[设计模式]组合模式(Compostie)
1.意图 将对象组合成树状结构以表示“部分—整体”的层次结构。Composite使得用户对单个对象和组合的使用具有一致性(整体和部分一致对待)。2.动机 在图形应用系统中可以用简单的组件(图元)创建复杂的组件(图表)。用户可以组合多个组件形成一个较大的组件(Winform开发中就有自定义控件),这些组件又可以组合成更大的组件。一个实现方法就是对组件定义一些类,另原创 2013-03-09 10:41:12 · 1270 阅读 · 0 评论 -
[设计模式]外观模式(Facade)
1.意图 为子系统中的一组接口提供一个一致的界面,Façade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。2.结构与参与者3.动机 如果对于顶层的操作不是很关注,那么可以将底层的操作封装,提供一个高层接口来调用底层的操作。就好比程序的编译会包括词法分析,语法分析,语义分析,中间语言生成,目标代码生成与优化。而用户并不在乎底层具原创 2013-03-07 21:21:02 · 710 阅读 · 0 评论 -
[设计模式]设计模式中的指导原则
在面向对象的编程中,想好很好的运用面向对象为我们工作,需要我们遵循几点原则。 一:总结图 二:详细分析 1,开放封闭原则 开放封闭原则是面向对象设计的核心所在。 作用:使软件的设计能够面向需求的改变,却能保持相对的稳定,从而使得系统在第一个版本以后不断更新。 实现:业务功能抽象为接口,当业务员依赖于固定的抽象时,对转载 2013-03-08 09:39:24 · 1084 阅读 · 0 评论 -
[设计模式]模板方法模式(Template Method)
1.意图 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。2.动机 其实就是如意图所描述的,算法的骨架是一样的,就是有些特殊步骤不一样。就可以采用模板方法,将相同的功能上升到父类中去。其实说白了就有点C++的继承就是一个模板方法。3.结构与参与者原创 2013-03-08 09:15:49 · 1161 阅读 · 0 评论 -
[设计模式]适配器模式(Adapter)
1.意图 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。2.结构与参与者3.代码示例#include #include using namespace std;class Player{protected: string name;public: Player(str原创 2013-03-07 10:28:59 · 761 阅读 · 0 评论 -
[设计模式]代理模式(Proxy)
1.意图 为其他对象提供一种代理以控制对这个对象的访问。2.结构与参与者3.动机 对一个对象进行访问控制的一个原因是为了只有在我们确实需要这个对象时才对它进行创建和初始化。我们考虑一个可以在文档中嵌入图形对象的文档编辑器。有些图形对象的开箱很大。但是打开文档必须很迅速,因此我们在打开文档时应避免一次性创建所有开销很大的对象。因为并非所有这些对原创 2013-03-07 20:14:37 · 1053 阅读 · 0 评论 -
[设计模式]装饰器模式(Decorator)
当你向旧的类中添加新代码时,一般是为了添加核心职责或主要行为。而当需要加入的仅仅是一些特定情况下才会执行的特定的功能时(简单点就是不是核心应用的功能),就会增加类的复杂度。装饰模式就是把要添加的附加功能分别放在单独的类中,并让这个类包含它要装饰的对象,当需要执行时,客户端就可以有选择地、按顺序地使用装饰功能包装对象。其根本的思想和Python中的装饰器是一样的。(装饰器模型的别名就是包装器Wrap原创 2013-03-07 14:55:06 · 1436 阅读 · 0 评论 -
[设计模式]单例模式(Singleton)
1. 意图 保证一个类仅有一个实例,并提供一个访问它的全局访问点。2. 结构与参与者3.效果1)对唯一实例的受控访问 因为Singleton类封装它的唯一实例,所以它可以严格的控制客户怎样以及何时访问它。2)缩小名称空间 Singleton模式是对全局变量的一种改进。它避免了那些存储唯一实例的全局变量污染名称空间。原创 2013-03-07 10:07:08 · 828 阅读 · 0 评论 -
[设计模式]原型模式(Prototype)
1. 意图 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。2. 结构与参与者3. 代码示例#include#include #include using namespace std;class Prototype //抽象基类 { private: string m_strName;public: Prototype原创 2013-03-07 09:11:41 · 677 阅读 · 0 评论 -
[设计模式]工厂方法模式(Factory Method)
与抽象工厂的区别:抽象工厂的抽象类组合的是创建一个系列对象的接口。而工厂方法只有一个接口,各个具体类实现该接口的方式不一样。1. 意图 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。2. 结构与参与者3.效果 1)为子类提供挂钩(hook)还没有搞懂 2原创 2013-03-06 21:43:44 · 796 阅读 · 0 评论 -
[设计模式]建造者模式(Builder)
1. 意图 将一个复杂对象的构建于它的表示分离,使得同样的构建过程可以创建不同的表示。并且因为构建过程是标准化的,所以当需要标准化构建过程时也可以使用。2. 结构与参与者3. 效果1) 它使你可以改变一个产品的内部表示 Builder对象提供给导向器一个构造产品的抽象接口。该接口使得生成器可以隐藏这个产品的表原创 2013-03-06 20:16:04 · 840 阅读 · 0 评论