摘要:方式一: 注:动态数组(new出来的数组)其实不是数组,因为我们最终得到不是一个数组对象,而是得到一个数组元素类型的指针。所以不能对动态数组使用begin函数和end函数。 动态分配一个空数组(int *p = new int[0])是合法的,此时new返回一个合法的非空指针,但是不能对这个指针解引
阅读全文
摘要:unique_ptr unique_ptr 对它指向的对象在同一时刻是独占的。它要么在构造的时候使用内置指针初始化,要么使用reset给其赋值。当unique_ptr被销毁时,它所指向的对象也被销毁。 unique_ptr特有的操作: unique_ptr不支持拷贝和赋值,但是这一点在函数调和返回上
阅读全文
摘要:unique_ptr unique_ptr 对它指向的对象在同一时刻是独占的。它要么在构造的时候使用内置指针初始化,要么使用reset给其赋值。当unique_ptr被销毁时,它所指向的对象也被销毁。 unique_ptr特有的操作: unique_ptr不支持拷贝和赋值,但是这一点在函数调和返回上
阅读全文
摘要:智能指针的出现是为了能够更加方便的解决动态内存的管理问题。注:曾经记得有本书上说可以通过vector来实现动态分配的内存的自动管理,但是经过试验,在gcc4.8.5下是不行的。这个是容易理解的,vector是个模板,它不能辨别传入的数据类型是否是指针,从而也不能进行自动的释放内存操作。如果对非new
阅读全文
摘要:代理模式 代理(Proxy)模式,为其它对象提供一种代理以控制对这个对象的访问。在某些情况下一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介作用。 代理模式UML类图 Subject类,定义了RealSubject和Proxy的公共接口,这样就在任何使用Real
阅读全文
摘要:访问者模式 访问者(Visitor)模式,表示一个作用于某对象结构中各个元素的操作。它使你可以在不改变各元素的前提下定义作用于这些元素的新操作。 访问者模式UML类图 Visitor:为该对象结构中ConcreteElement的每一个具体类声明一个Visit操作。它的参数就是可以访问的元素,它的方
阅读全文
摘要:解释器模式 解释器(Interpreter)模式,给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 解释器模式需要解决的问题是:如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子,这样就可以构建一个解释器
阅读全文
摘要:中介者模式 中介者模式又名调停者模式。将一个系统分割成许多对象通常可以增加其可复用性,但是对象间相互连接的激增又会降低其可复用性。因为大量的连接使得一个对象不可能在没有其它对象的支持下工作,系统表现为一个不可分割的整体,所以,对系统的行为进行任何较大的改动就十分困难了。解决这个问题的办法是两个类之间
阅读全文
摘要:职责链模式 职责链(Chain Of Responsibility)模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它为止。 这里发出这个请求的客户端并不知道这当中的哪一个对象最终处理这个请求,这样系统的更
阅读全文
摘要:命令模式 命令(Command)模式,将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 命令模式UML类图 Command:定义命令的接口,声明执行的方法。 ConcreteCommand类:将一个接收者对象绑定于一个动作,调用接受者
阅读全文
摘要:2018-09-23 19:30:03 迭代器模式 遍历:所谓遍历,就是指把一个集合中的所有元素挨个访问一遍(这里的访问,就是它的字面意思)。 迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。 迭代器模式UML类图 迭代器模式的优缺点 优点:
阅读全文
摘要:2018-09-22 22:35:23 备忘录模式 备忘录(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原来保存的状态。 备忘录模式UML类图 Originator(发起人):负责创建一个备忘录Memento,用以记录当前时
阅读全文
摘要:2018-09-22 16:16:13 要避免过长的方法,面向对象设计实际上是希望做到代码的责任分解。 状态模式 状态(State)模式,当一个对象的内在状态改变时允许改变其行为,这个对象看起来就像是改变了其类。状态模式主要解决的是当控制一个对象状态转换条件表示式过于复杂时的情况。把状态的判断逻辑转
阅读全文
摘要:2018-09-21 20:57:03 观察者模式 观察者模式又叫做发布-订阅(Publish/Subscribe)模式。它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有的观察者对象,使它们能够自动更新自己。 观察者(Observer)模
阅读全文
摘要:2018-09-21 18:42:07 模板模式 模板(Template)模式,定义一个操作中算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 模板模式UML类图 AbstractClass:一个抽象模板,定义抽象的原语操作(Primit
阅读全文
摘要:2018-09-21 15:54:34 策略模式 工厂系列模式只是解决了对象创建的问题。策略(Strategy):它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。算法本身是一种策略,而且这种策略是随时都可能相互替换的,这就是变化点,而封装变化点是
阅读全文
摘要:2018-09-21 10:07:30 享元模式 享元模式(Flyweight),运用共享技术有效的支持大量细粒度的对象。 享元模式UML类图 · FlyWeightFactory:用于创建并管理享元对象,它针对抽象享元类编程,将各种类型的具体享元对象存储在一个享元池中,享元池一般设计为一个存储“键
阅读全文
摘要:2018-09-20 16:12:07 组合模式(Composite) 组合模式(Composite),将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象(即叶子构件)和组合对象(即组合构件)的使用具有一致性。(例如,你可以在word里对单个字和一行字采用同样的操作)注意
阅读全文
摘要:2018-09-20 10:53:13 前言 滥用继承会带来麻烦(实际上何止是麻烦,还会带来性能上的额外开销,关于继承的问题,可以查看继承相关的文章)。比如,对象的继承关系是在编译时就定义好了,所以无法在运行时改变从父类继承的实现。子类实现与它的父类有非常紧密的依赖关系。以至于父类中的任何变化必然会
阅读全文
摘要:2018-09-20 01:33:12 外观模式(Facade Pattern) 还是用大话设计模式中的例子:股票和基金来说明外观模式。股票买入者直接操作股票,他需要了解几千只股票的各种信息还需要预测它的涨跌,这样买入者和股票直接有着直接的联系,在软件开发种,这就是高耦合(模块和模块之间的联系过多)
阅读全文