随笔分类 - 设计模式
摘要:1.概述 自己卖了一辆越野自行车,但毕竟不是自己定制的,买回来之后可能需要更改一下脚蹬,座皮,里程计数器或者刹车系统,假如将自行车看做一个整体系统,对我们而言使用的是自行车,然后我们对自己车构件的修改对于我们的使用而言并没有什么影响。在软件里面一个大型系统需要分割为多个不同的子系统组成,可能回派分给不同的人去完成,对于我们整个系统顶层实现而言,我们只用关注子系统提供的接口即可,而不用去处理子系统的细节,并且尽量去降低每个子系统之间的关系对于后面的扩展肯定是更好的。从面向对象的角度而言,我们需要每个子系统之间的耦合行最低并且子系统的更改尽量不会去更改顶层代码,这时候我们就需要外观模式来完成这个人
阅读全文
摘要:概论 说到适配器想到最多的是电源适配器笔记本电源是220V交流转换为12V直流电适配器,手机充电器是交流220V转换为5V直流适配器,机械上也经常使用中间齿轮来耦合;另外两个齿轮,等等。 软件中的适配器主要为客户要提供原先类没不存在的接口或者方法,从而解决接口不兼容的问题。设计模式主要提供两种实现方法 类适配器 和 对象适配器 模式图 (1)类适配器 类适配器通过多重继承的方法实现,适配器类Adapter继承Target和Adaptee 两个类的接口,然后做出转换。但是对于C++而言,多重继承有很多风险,很多人不建议使用(2)对象适配器 对象适配器使用包含的方式实现,Adapter类从目标接口
阅读全文
摘要:概述 建造者模式,又称生成器模式,将产品内部的表象与产品的生成过程分离,从而可以使用同样的过程或者方法来建造具有不同内部表象的产品对象。使用builder模式后,用户只用指定建造的类型就可以获得他们,而具体的建造过程和细节就不想需要知道了。这里引用另外一个可能比较具体的描述:”在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定。如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的 “稳定构建算法”不随着需求改变
阅读全文
摘要:原型模式(prototype)用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。允许一个对象再创建另外一个新对象的时候根本无需知道任何创建细节,只需要请求圆形对象的copy函数皆可。1原型模式构成客户(Client)角色:客户类提出创建对象的请求。抽象原型(Prototype)角色:这是一个抽象角色,C++实现的抽象类,此角色给出所有的具体原型类所需的接口。具体原型(Concrete Prototype)角色:被复制的对象。此角色需要实现抽象原型角色所要求的接口。2原型模式C++实现(1)通过C++的拷贝构造函数实现(2)clone()函数返回的类是基类,建议通过static_c
阅读全文
摘要:对于每一个程序员来说,程序的运行效率都是一个值得重视,并为之付出努力的问题。但是程序性能的优化也是一门复杂的学问,需要很多的知识,然而并不是每个程序员都具备这样的知识,而且论述如何优化程序提高程序运行效率的书籍也很少。但是这并不等于我们可以忽略程序的运行效率,下面就介绍一下本人积累的一些简单实用的提高程序运行效率的方法,希望对大家有所帮助。 注:以C/C++程序为例 一、尽量减少值传递,多用引用来...
阅读全文
摘要:1 前言 先介绍一下面向对象设计的原则: (1)OCP(开放关闭原则):软件对扩展是开放的 ,对修改是关闭的,核心思想:对抽象编程,不对实现编程 (2)DIP(依赖倒转原则):依赖于抽象,而不依赖实现 (3)LSP(李氏替换原则):子类都可以替换父类 再看看上一篇文章中关于简单工厂模式的例子,如果现在需要扩展一个M的N次方这样一个元算,简单工厂类的话 只需要添加一个Operation继承一个运算...
阅读全文
摘要:从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。1简单工厂模式结构图简单工厂模式主要包含三部分(1)工厂:负责根据客户需求创造需要的产品(2)抽象产品:工厂生产产品的父类(3)具体产品2代码分析 /*设计模式学习系列之简单工厂模式 * 参考书籍《大话设计模式》 * 简单工厂模式 的主要用途:根据需求创造需要的实例 * * 例子逻辑:两个数的..
阅读全文
摘要:观察者模式,又称为发布订阅模式,收听模式等,该模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新,下面的代码主要参考《大话设计模式》这本书,我用C++写了一边,并且做了一些修改和优化。故事背景:无故事的逻辑:观察者的状态修改的时候 ,通知依附于它本身的被通知者,通知者收到状态修改的信息之后作出状态修改的信息输出 /*设计模式学习系列之观察者模式* 参考书籍《大话设计模式》 * 观察者莫模式的主要用途:当一个对象的改变需要同时改变其他对象状态的时候,该模式 * 可以将二者解除耦合,使二者独立的进行改变和复用 * * 例子的架构:通知者与.
阅读全文
摘要:面向对象的3个基本要素:封装、继承、多态 面向对象的5个基本设计原则: 单一职责原则(Single-Resposibility Principle) 其核心思想为:一个类,最好只做一件事,只有一个引起它的变化。单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。职责过多,可能引起它变化的原因就越多,这将导致职责依赖,相互之间就...
阅读全文
摘要:为什么学习单例模式,因为单例模式用的比较广泛,游戏客户端的配置文件读取类,服务器日志类等等,都是使用单例模式来实现,单例模式也即是保证类只有一个实例,并且访问类全局的接口,这种方法可以使用全局来实现,但不能保证只存在一个,最好的办法是类中做限制,现在单例模式的实现方法有两种,一种称为饿汉式,类加载的时候就初始化,另外一种是懒汉式,在使用的时候创建对象1懒汉模式指针版本class singletonP { //类中默认生成的 构造函数,copy构造函数,赋值设置为私有变量 private: singletonP(){str = "懒汉模式 使用指针注意释放问题哦";} ...
阅读全文