麻子来了
这个作者很懒,什么都没留下…
展开
-
设计模式学习笔记(原型模式)
一、原型模式的作用?1、基本就是你需要从A的实例得到一份与A内容相同,但是又互不干扰的实例的话,就需要使用原型模式。2、用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。这个其实和C++的拷贝构造函数的作用是相似的(但不相同),实际上就是动态抽取 当前对象 运行时 的 状态。3、当然有的时候,如果我们并不需要基于现有的对象复制新的对象,或者我们需要的就原创 2017-08-02 21:21:09 · 735 阅读 · 0 评论 -
面向对象设计模式学习笔记七Prototype原型模式
为什么需要原型模式在软件系统中,经常面临着某些结构复杂的对象的创建工作;由于需求变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。如何应对这种变化?如何向“客户程序(使用这些对象的程序)”隔离出“这些易变对象”,从而使得“依赖这些易变对象的客户程序”不随需求改变而改变?原型模式与工厂模式区别:原型与工厂都是解决绕开new,来避免对象创建(new)过程 中所导致的...原创 2019-02-17 20:59:09 · 172 阅读 · 0 评论 -
面向对象设计模式学习笔记八适配器模式
为什么需要适配器模式?在组件构建过程中,某些接口之间直接的依赖常常会带来很多问题、甚至根本无法实现。采用添加一层间接(稳定)接口,来隔离本来互相紧密关联的接口是一种常见的解决方案。在实际项目中,经常需要迁移老的类库,适应新的接口,这也是适配器模式的主要职责之一。什么是适配器模式?将一个类的接口转换成客户希望的另一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类...原创 2019-02-24 15:54:21 · 197 阅读 · 0 评论 -
面向对象设计模式学习笔记九中介者模式
为什么需要中介者模式?在软件构建过程中,经常会出现多个对象互相关联交互的情况,对象之间常常会维护一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断的变化。在这种情况下,我们可使用一个“中介对象”来管理对象间的关联关系,避免相互交互对象间的紧耦合引用关系,从而更好地抵御变化。什么是中介者模式?用一个中介对象来封装(变化)一系列的对象交互。中介者使各对象不需要显示...原创 2019-02-24 16:44:32 · 143 阅读 · 0 评论 -
面向对象设计模式学习笔记十装饰模式
为什么需要装饰模式?在某些情况下我们可能会“过度地使用继承来扩展对象的功能”, 由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性; 并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展 功能的组合)会导致更多子类的膨胀。举例://业务操作class Stream{public: virtual char Read(int number)=0; vir...原创 2019-02-24 21:19:30 · 159 阅读 · 0 评论 -
面向对象设计模式学习笔记十一桥模式
为什么需要桥模式?由于某些类型的固有的实现逻辑,使得它们具有两个变化的维度, 乃至多个纬度的变化。而多维度的变化对于该类的使用者会带来复杂性上的急剧增加。举例现在的项目需求是我们的软件有两种版本:基础版和完美版。并且每种版本既要支持移动端,又要支持PC端。如果不使用设计模式,我们大概率会产生如下代码:一、class Messager{public: virtual vo...原创 2019-03-03 13:07:34 · 198 阅读 · 0 评论 -
面向对象设计模式学习笔记十二模板模式
为什么需要模板方法?在软件构建过程中,对于某一项任务,它常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有的原因(比如框架与应用之间的关系)而无法和任务的整体结构同时实现。如何在确定稳定操作结构的前提下,来灵活应对各个子步骤的变化或者晚期实现需求?举例://程序库开发人员class Library{public: void Step1(){ //......原创 2019-03-03 15:53:05 · 173 阅读 · 0 评论 -
面向对象设计模式学习笔记十三观察者模式
为什么需要观察者模式在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” ——一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密, 将使软件不能很好地抵御变化。使用面向对象技术(观察者模式),可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。举例:目前项目需要将文件分割器的分割进度通知到界面显示。...原创 2019-03-03 18:09:19 · 197 阅读 · 0 评论 -
面向对象设计模式学习笔记十四单例模式(多线程)
为什么需要单例模式?面向对象很好的解决了抽象问题,但是必不可免的要付出一定的代价。对于通常情况来讲,面向对象的成本大都可以忽略不计。但是某些情况,面向对象所带来的成本必须谨慎处理。在软件系统中,经常有一些特殊的类,必须保证他们在系统中只存在一个实例,才能确保他们的逻辑正确性、以及良好的效率。如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?什么是单例模式保证一个类仅有...原创 2019-03-10 11:46:45 · 159 阅读 · 0 评论 -
面向对象设计模式学习笔记十五享元模式
为什么需要享元模式在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价---主要指内存需要方面的代价。什么是享元模式运用共享技术有效地支持大量细粒度的对象。类图示例class Font {//将字体实现为对象private: //unique object key string key; /...原创 2019-03-10 12:32:57 · 177 阅读 · 0 评论 -
面向对象设计模式学习笔记六抽象工厂
为什么需要抽象工厂模式?在软件系统中,经常面临着“一系列相互依赖的对象”的创建工 作;同时,由于需求的变化,往往存在更多系列对象的创建工作。如何应对这种变化?如何绕过常规的对象创建方法(new),提供一 种“封装机制”来避免客户程序和这种“多系列具体对象创建工作” 的紧耦合?举例说明:数据库操作>按照工厂模式,我们很容易得到以下代码://数据库访问有关的基类class...原创 2019-02-11 12:39:57 · 171 阅读 · 0 评论 -
面向对象设计模式学习笔记五工厂模式
为什么需要工厂模式?在软件系统中,经常面临着创建对象的工作;由于需求的变化,需要创建的对象的具体类型经常变化。如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“具体对象创建工作”的紧耦合?举例说明//文件分割器class ISplitter{public: virtual void split()=0; virt...原创 2019-02-11 10:34:44 · 173 阅读 · 0 评论 -
设计模式学习笔记(Build模式)
一、Build模式的作用通过Build模式可以利用同一个创建过程创建出不同的对象,即同样的构建过程可以创建不同的表示。并且将具体的构建过程向客户隐藏。 Build模式的参与者有Builder、ConcreteBuild、Dirctor以及Product。构建指的就是生产一个产品的步骤(Dirctor),表示就是每个产品部分的具体实现(ConcreteBuild),通过Director封装步原创 2017-08-13 13:41:18 · 375 阅读 · 0 评论 -
设计模式学习笔记(抽象工厂模式)
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。class MazeFactory{//抽象工厂public: MazeFactory(); virtual Maze* MakeMaze() const//产品对象 { return new Maze;} virtual Wall原创 2017-09-04 22:27:45 · 290 阅读 · 0 评论 -
设计模式学习笔记(单例模式)
一、单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式是对全局变量的一种改进。全局变量在项目中是能不用就不用的,它是一个定时炸弹,是一个不安全隐患,特别是在多线程程序中,会有很多的不可预测性;同时,使用全局变量,也不符合面向对象的封装原则原创 2017-09-11 22:33:18 · 252 阅读 · 0 评论 -
设计模式学习笔记(工厂模式)
一、定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂模式使一个类的实例化延迟到其子类。C++中的工厂方法(工厂基类中所定义的创建产品的函数)都是虚函数并且常常是纯虚函数。二、参与者:Product:(工厂基类)定义工厂方法所创建的接口;ConcreteProduct:(工厂具体类)实现Product接口;Creator:声明工厂方法,返回一个Product对象原创 2017-09-10 23:32:48 · 277 阅读 · 0 评论 -
为什么需要设计模式?
我们知道,现代软件开发越来越大型化、越来越复杂、需求变化越来越频繁。建筑商从来不会去想给一栋已建好的100层高的楼房底下再新修一个小地下室——这样做花费极大而且注定要失败。然而令人惊奇的是,软件系统的用户在要求作出类似改变时却不会仔细考虑,而且他们认为这只是需要简单编程的事。软件设计复杂的根本原因•客户需求的变化•技术平台的变化•开发团队的变化•市场环境的变化如上种种的...原创 2019-02-03 11:27:36 · 382 阅读 · 0 评论 -
面向对象设计模式学习笔记一概述
面向对象8大设计原则:依赖倒置原则( DIP):高层模块(稳定)不应该依赖于低层模块(变化),二者都应该依赖于抽象(稳定) ;抽象(稳定)不应该依赖于实现细节(变化) ,实现细节应该依赖于抽象(稳定)。 开放封闭原则( OCP):对扩展开放,对更改封闭; 类模块应该是可扩展的,但是不可修改。 单一职责原则( SRP): 一个类应该仅有一个引起它变化的原因;变化的方向隐含类的职责。 Lis...原创 2019-02-03 12:37:10 · 208 阅读 · 0 评论 -
面向对象设计模式学习笔记二Composite模式
为什么需要Composite设计模式?如果客户代码过多地依赖于对象容器复杂的内部实现结构,对象容器内部实现结构(而非抽象接口)的变化将引起客户端的频繁变化,带来了代码的维护性、扩展性等弊端。什么是Composite设计模式?常常有一些组件在内部具有特定的数据结构,如果让客户程序依赖这些特定的数据结构,将极大地破坏组件的复用。这时候,将这些特定数据结构封装在内部,在外部提供统一的接口,来...原创 2019-02-04 14:27:34 · 265 阅读 · 0 评论 -
面向对象设计模式学习笔记三State模式
为什么需要State模式?1、在组件构建过程中,某些对象的状态经常面临变化,如何对这些变化进行有效的管理?同时又维持高层模块的稳定?2、在软件构建过程中,某些对象的状态如果改变,其行为也会随之变化,比如文档处于只读状态,其支持的行为和读写状态支持的行为就可能完全不同。3、如何在运行时根据对象的状态类透明的更改对象的行为?而不会为对象操作和状态转化之间引入紧耦合?举例说明://...原创 2019-02-07 12:56:59 · 271 阅读 · 0 评论 -
面向对象设计模式学习笔记四策略模式
为什么需要策略模式在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。 举例说明税法计算案例:程序员要有一个时间轴的概念,不能静态的看待问题。如果增加对法国的税法,则需要更改代码,重新编译、部署违背了开放封闭原则:对更改封闭,对扩展开放enum TaxBase...原创 2019-02-07 14:05:26 · 172 阅读 · 0 评论 -
面向对象设计模式学习笔记十六总结
如何运用?现代软件设计的特征是“需求的频繁变化”。设计模式的要点是“寻找变化点,然后在变化点处应用设计模式,从而来更好地应对需求的变化” .设计模式的应用不宜先入为主,一上来就使用设计模式是对设计模式的最大误用。没有一步到位的设计模式。敏捷软件开发实践提倡的“Refactoring to Patterns” 是目前普遍公认的最好的使用设计模式的方法。一定要重构到设计模式。怎样重构?...原创 2019-03-10 13:10:42 · 153 阅读 · 0 评论