定义 将抽象部分(业务功能)与实现部分(平台实现)分离,使它们都可以独立地变化。 动机 由于某些类型的固有的实现逻辑,使得它们具有两个变化的维度, 乃至多个纬度的变化。 如何应对这种“多维度的变化”?如何利用面向对象技术来使得 类型可以轻松地沿着两个乃至多个方向变化,而不引入额外的复杂 度? 结构 要点 Bridge模式使用“对象间的组合关系”解耦了抽象和实现之间固 有的绑定关系,使得抽象和实现可以沿着各自的维度来变化。所谓 抽象和实现沿着各自纬度的变化,即“子类化”它们。 Bridge模式有时候类似于多继承方案,…

2018年3月30日 0条评论 2862点热度 0人点赞 icebmji 阅读全文

定义 动态(组合)地给一个对象增加一些额外的职责。就增加功 能而言,Decorator模式比生成子类(继承)更为灵活(消 除重复代码 & 减少子类个数)。 动机 在某些情况下我们可能会“过度地使用继承来扩展对象的功能”, 由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性; 并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展 功能的组合)会导致更多子类的膨胀。 如何使“对象功能的扩展”能够根据需要来动态地实现?同时避 免“扩展功能的增多”带来的子类膨胀问题?从而使得任何“功能 扩展变化”所导致…

2018年3月29日 0条评论 2482点热度 0人点赞 icebmji 阅读全文

定义 定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(Subject)的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。 动机 在软件构建过程中,我们需要为某些对象建立一种“通知依赖关 系” ——一个对象(目标对象)的状态发生改变,所有的依赖对 象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密, 将使软件不能很好地抵御变化。 使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定 的依赖关系。从而实现软件体系结构的松耦合。 结构 要点 使用面向对象的抽象,Observer模式使得我们可以…

2018年3月29日 0条评论 3102点热度 0人点赞 icebmji 阅读全文

定义 定义一系列算法,把它们一个个封装起来,并且使它们可互相替换(变化)。该模式使得算法可独立于使用它的客户程序(稳定)而变化(扩展,子类化) 动机 在软件构建过程中,某些对象使用的算法可能多种多样,经常改 变,如果将这些算法都编码到对象中,将会使对象变得异常复杂; 而且有时候支持不使用的算法也是一个性能负担。 如何在运行时根据需要透明地更改对象的算法?将算法与对象本 身解耦,从而避免上述问题? 结构 要点 Strategy及其子类为组件提供了一系列可重用的算法,从而可以使 得类型在运行时方便地根据需要在各个算法之…

2018年3月27日 0条评论 3064点热度 0人点赞 icebmji 阅读全文

定义 定义一个操作中的算法的骨架 (稳定),而将一些步骤延迟(变化)到子类中。Template Method使得子类可以不改变(复用)一个算法的结构即可重定义(override 重写)该算法的某些特定步骤。 动机 在软件构建过程中,对于某一项任务,它常常有稳定的整体操作 结构,但各个子步骤却有很多改变的需求,或者由于固有的原因 (比如框架与应用之间的关系)而无法和任务的整体结构同时实现。 如何在确定稳定操作结构的前提下,来灵活应对各个子步骤的变 化或者晚期实现需求? 结构 要点 Template Method模式是…

2018年3月26日 0条评论 3180点热度 0人点赞 icebmji 阅读全文

GOF角度模式分类 创建型(Creational)模式:将对象的部分创建工作延迟到子 类或者其他对象,从而应对需求变化为对象创建时具体类型实 现引来的冲击 结构型(Structural)模式:通过类继承或者对象组合获得更灵 活的结构,从而应对需求变化为对象的结构带来的冲击 行为型(Behavioral)模式:通过类继承或者对象组合来划分 类与对象间的职责,从而应对需求变化为多个交互的对象带来 的冲击 从封装变化角度对模式分类 组建协助: Template Method Observer / Event Strate…

2018年3月26日 0条评论 2259点热度 0人点赞 icebmji 阅读全文

基本认知 程序员既要有逻辑思维也要有抽象思维 三大机制:封装,隐藏内部实现、继承,复用现有代码、多态,改写对象行为 人类在解决复杂问题时通常的方案:分解,将复杂的问题分解为多个已知的、可解决的简单问题、抽象,忽视问题的非本质细节,处理泛化的、理想的对象模型 复用,不重复造轮子 面向对象构建方式能够更适用软件的变化 面向对象设计的几个原则 依赖倒置原则(Dependency inversion principle,DIP) 在传统的应用架构中,低层次的组件设计用于被高层次的组件使用,这一点提供了逐步的构建一个复杂系统…

2018年3月26日 0条评论 2655点热度 0人点赞 icebmji 阅读全文

参考链接: GPU渲染管线 如何理解 OpenGL 中着色器、渲染管线、光栅化等概念? 渲染管线浅析 浅谈 GPU图形固定渲染管线 OpenGL的固定功能管线 转自:OpenGL: 渲染管线理论 我的理解就是顶点->图元->光栅->片元->帧缓冲 阶段1. 指定几何对象 如:点 线 三角形.等一些几何图元..OpenGL绘制几何图元的方法有以下三种: <1> 一次一个顶点.即使用glBegin()  glVertex() glEnd() 指定几何对象. <2> 使用顶…

2018年2月5日 0条评论 3245点热度 0人点赞 icebmji 阅读全文

今天把https弄好了,虽然只是最基本的https,加上了小绿锁,感觉不错,不过多媒体资源都是用的OSS,等回头再看看怎么配置吧 阿里云的OSS是支持https的,如果用自己的二级域名的话,还要弄反向代理加上,而且自己的二级域名也要弄ssl证书,我的证书只申请了icebmji.com和www.icebmji.com的,所以等下次喽 把media.icebmji.com的证书申请下来了,但文章中的一些必须是http的链接,我目前还是无能为力,毕竟有的网站不支持https,总不能强行改吧 一些参考的网站,我是按acme…

2018年1月29日 0条评论 4109点热度 0人点赞 icebmji 阅读全文

#pragma comment。将一个注释记录放置到对象文件或可执行文件中。 #pragma pack。用来改变编译器的字节对齐方式。 #pragma code_seg。它能够设置程序中的函数在obj文件中所在的代码段。如果未指定参数,函数将放置在默认代码段.text中 #pragma once。保证所在文件只会被包含一次,它是基于磁盘文件的,而#ifndef则是基于宏的。 文件指针指向的是一块内存区域,这块区域存储着打开的文件的相关信息,包括文件读取指针当前位置、文件读取缓冲区大小等信息,并不是指向文件的。fsc…

2018年1月11日 0条评论 1757点热度 0人点赞 icebmji 阅读全文