
设计模式学习
ctreewang
这个作者很懒,什么都没留下…
展开
-
用代码和UML图化解设计模式之《工厂模式》
所谓工厂模式,其实就是用来产生实例的地方。生产某一类型的产品。因此也是利用了类管理和类多态的一个特性吧。 下面直接上图 在Factory 中产生human的实例, 然后通过实例来调用方法。// Factory.cpp : 定义控制台应用程序的入口点。/*********************************************************原创 2012-10-20 11:06:13 · 5598 阅读 · 0 评论 -
标准库 STL :Allocator能做什么?
Allocator是C++语言标准库中最神秘的部分之一。它们很少被显式使用,标准也没有明确出它们应该在什么时候被使用。今天的allocator与最初的STL建议非常不同,在此过程中还存在着另外两个设计--这两个都依赖于语言的一些特性,而直到最近才在很少的几个编译器上可用。对 allocator的功能,标准似乎在一些方面追加了承诺,而在另外一些方面撤销了承诺。这篇专栏文章将讨论你能用allo转载 2014-03-26 14:46:50 · 7653 阅读 · 1 评论 -
统一接入层方案
Table of Contents1 概述2 技术方案2.1 要考虑的问题2.2 总体架构2.3 负载均衡器选型2.4 高可用方案2.5 会话保持方案2.6 URL资源的统一规划2.7 方案扩展3 实施计划1 概述信息中心网络组已经对应用服务器所在的网络进行划分,应用系统的节点分别部署到网络的接入层、应用层和数据层。这样的划分能够提高应用系统和敏感数转载 2014-11-13 00:12:18 · 6653 阅读 · 0 评论 -
memcached源码阅读----使用libevent和多线程模型
本篇文章主要是我今天阅读memcached源码关于进程启动,在网络这块做了哪些事情。一、iblievent的使用 首先我们知道,memcached是使用了iblievet作为网络框架的,而iblievet又是单线程模型的基于linux下epoll事件的异步模型。因此,其基本的思想就是 对可读,可写,超时,出错等事件进行绑定函数,等有其事件发生,对其绑定函数回调。原创 2014-09-14 23:55:12 · 11244 阅读 · 0 评论 -
服务端架构中的“网关服务器”
这么一个场景:一个要承载高并发、具有高性能的后台服务,往往会有多个不同的应用服务。问题来了,你会怎样设计架构呢?如下图所示,为了共用一个稳定高效的网络处理功能,把所有服务写在一个进程里。接下来悲剧一幕幕就要上演了,如果各个模块是多人协作开发,网络库的作者得想办法设计个插件机制供各个应用挂载,开发时无论是人员或者代码都耦合非常严重,大大影响协作、开发效率,后期要增减一个应转载 2014-11-14 18:11:02 · 4705 阅读 · 1 评论 -
推荐!国外程序员整理的 C++ 资源大全
关于 C++ 框架、库和资源的一些汇总列表,由 fffaraz 发起和维护。内容包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。 标准库C++标准库,包括了STL容器,算法和函数等。C++ Standard Library:是一系列类和函数的集合,使用核心语言编写,也是C++ISO自身标准的一部分。Standard Te转载 2014-11-02 08:11:18 · 3237 阅读 · 1 评论 -
高并发Web服务的演变——节约系统内存和CPU
摘要:现在的Web系统面对的并发连接数在近几年呈现指数增长,高并发成为了一种常态,给Web系统带来不小的挑战。一味地通过增加机器来解决并发量的增长,成本是非常高昂的。结合技术优化方案,才是更有效的解决方法。 【导读】 徐汉彬曾在阿里巴巴和腾讯从事4年多的技术研发工作,负责过日请求量过亿的Web系统升级与重构,目前在小满科技创业,从事SaaS服务技术建设。一、越来转载 2015-03-12 10:24:15 · 1141 阅读 · 0 评论 -
基于redis AE的异步网络框架
最近一直在研究redis的源码,redis的高效率令人佩服。在我们的linux机器上,cpu型号为, Intel(R) Pentium(R) CPU G630 @ 2.70GHz Intel(R) Pentium(R) CPU G630 @ 2.70GHz上 set,get 都能达到每秒钟15W的请求处理量,真是佩服这代码的效率。前几篇文章,主要是介绍了基本的代码,比如原创 2014-07-02 12:35:58 · 6851 阅读 · 1 评论 -
redis源码解读之哈希接口————dict.h文件
这篇文章主要是介绍redis的哈希的原创 2014-05-04 13:03:12 · 3141 阅读 · 2 评论 -
redis源码解读之双向链表————adlist.h文件
redis内部最最常见的数据结构就是双向链表,很多数据都是存储到链表内部的。先提供一下链表的一个节点代码typedef struct listNode { struct listNode *prev; struct listNode *next; void *value;} listNode;就是这样子。双向链表的一个迭代器在遍历链原创 2014-04-22 17:50:09 · 1985 阅读 · 0 评论 -
无锁队列--基于linuxkfifo实现
一直想写个无锁的队列,来提高项目后台的效率。偶然看到linux内核的kfifo.h 实现原理。于是自己仿照了这个实现,目前linux应该是可以对外提供接口了。#ifndef _NO_LOCK_QUEUE_H_#define _NO_LOCK_QUEUE_H_#include #include #include #include #include #include原创 2015-06-15 15:37:51 · 4047 阅读 · 1 评论 -
线程安全的简单的通用的cache
templateclass StupidCacheKV{private:map cache;mutable sox::mutex StupidCacheMutex;public:void set(const string& key, const T & value){sox::scope_lock lock(StupidCacheMutex);cache[k原创 2015-08-31 19:52:35 · 1674 阅读 · 0 评论 -
c++ template 的traits技术
本技术相对来说比较难理解,这种技术,是在stl源码中使用到的,给我感觉的作用就是对类的解耦。因为,工作中用到这种技术相对来说,比较少,所以,我目前还不是非常理解,下面是我敲书上的例子。首先上一段代码#ifndef BEARCORNER_H#define BEARCORNER_H#include using std::ostream;class Milk{public:原创 2015-11-28 01:12:13 · 1891 阅读 · 0 评论 -
支持vector,map,list<map>序列化,反序列化实现
协议序列化原创 2015-11-29 23:33:18 · 10708 阅读 · 5 评论 -
MMORPG服务器架构
一.摘要1.网络游戏MMORPG整体服务器框架,包括早期,中期,当前的一些主流架构2.网络游戏网络层,包括网络协议,IO模型,网络框架,消息编码等。3.网络游戏的场景管理,AI,脚本的应用等。4.开源的网络服务器引擎5.参考书籍,博客二.关键词网络协议 网络IO 消息 广播 同步 CS TCP/UDP IP 集群 负载均衡 分布式 网关服转载 2013-08-30 00:42:56 · 3071 阅读 · 0 评论 -
用代码和UML图化解设计模式之《责任链模式》
责任链模式,用我的理解就是动作的处理链表。根据请求的不同类型,在链表查找相应类型的处理者。处理者是一个链表。wiki上说明wikipedia的定义为:CoR pattern consists of a source of command objects and a series of processing objects. Each processing object contains a原创 2012-11-06 20:20:47 · 2636 阅读 · 2 评论 -
用代码和UML图化解设计模式之《策略模式》
什么是策略模式,用我个人的定义就是利用了面向对象的多态等特性,通过一个类来管理实体类的一种编程技巧。这种模式在项目中是经常用到的。 通过建模大家可以清晰的看到这些类层次关系。下面就用代码来实现一下。我使用的是VS2005的,大家可以根据需要修改部分代码。 #include "stdafx.h"#include using namespace std;clas原创 2012-10-18 09:44:10 · 3378 阅读 · 0 评论 -
用代码和UML图化解设计模式之《装饰模式》
这个模式看了两次,因为我有点不太理解,其实到现在也不太理解。通过写代码,自我理解就是把对象重新装饰了一遍。通过继承同一个基类。而不用添加额外的类了。。。。上图吧通过修饰类达到我们想要的效果。修饰类通常初始化了基类。// Decorator.cpp : 定义控制台应用程序的入口点。//****************************************原创 2012-10-29 23:30:30 · 2251 阅读 · 0 评论 -
用代码和UML图化解设计模式之《代理模式》
代理模式,就是相同的两个类,一个类做另一个类的代理人。出头露面的是第一个人,实际做事情的是第二人。 但是第一个人怎么知道第二个人能做那些事情。就继承了同一个父类。 CMon类代理他所有女儿的事情。 而不用他们女儿亲自出马,但是呢实际做事情的还是他们女儿。下面上代码 // Proxy.cpp : 定义控制台应用程序的入口点。//#include "stda原创 2012-10-19 10:08:53 · 3371 阅读 · 0 评论 -
用代码和UML图化解设计模式之《门面模式》
看了门面模式的一些资料。觉得门面模式就是为了解决实体类过多,而这些实体类就是为了做一件事情,组合起来。 因此门面模式出现了,他就是解决很多类的协调关系。用另个一类聚合这些类之间的事情。因此,当我们调用一个类的时候,所有的事情完成了 这个看起来就像一个门面一样。 图呢,和策略模式差不多,但是本质思想的功能是不一样的。我在这里是用去征政府部门办事情,必须先去部门A,然后再去原创 2012-10-21 23:26:42 · 1861 阅读 · 0 评论 -
用代码和UML图化解设计模式之《抽象工厂模式》
抽象工厂模式,就是把工厂类也给他多态了。 根据需求不同的工厂生产不品种的实体。比如在游戏中。 纯在vip用户对应的vip的宠物对应的vip的怪物,或者vip任务。因此,vip工厂就生产vip这些东西了。但是普通的也要生产。因此 就抽象出来两个类了。 下面我是根据游戏中,不同的角色来定义的一些实体类。直接上图,大家就看明白了 也就是特殊对象特殊对待。因此工厂就要特殊原创 2012-10-21 01:45:16 · 3944 阅读 · 0 评论 -
用代码和UML图化解设计模式之《适配器模式》
所谓适配器模式,就是为了解决或者叫融合系统之间的差异,通过提供一个类,来融合这种差异。这让我想起来读《UNIX 编程艺术》里一个名词 就是胶合层。 胶合层也算是一种适配上层鱼下层之间的差异和出现的一种处理方式。 这个是解决系统差异的一个具体表现, 下面上图吧 代码片段 // Adapter.cpp : 定义控制台应用程序的入口点。///***原创 2012-10-22 10:12:25 · 4705 阅读 · 0 评论 -
用代码和UML图化解设计模式之《迭代器模式》
这个模式在stl中是非常之常见,因为迭代器进行元素输出的时候基本都是用这个。。。。。不多说上图 自己实现一个简单的栈,内部友元类是iterator 迭代器初始化mystack; // Iterator.cpp : 定义控制台应用程序的入口点。//************************************************************原创 2012-10-31 23:29:43 · 2044 阅读 · 0 评论 -
用代码和UML图化解设计模式之《模板方法模式》
今天学习了模板方法模式,让我恍然大悟,似曾相识。因为之前自己再设计项目的时候,就用到了这个模式。当时还不知道自己用的是个模式,只是觉得非常好。很给力。所以,今天学起来很有感受。 这个模式就是利用了面向对象的多态,抽象哪些公用的方法,就不用实现了,其他的按照业务逻辑来独自实现。等到调用就ok了 今天只能上代码了// TemplateMethod.cpp : 定义控制台应用原创 2012-10-23 00:46:24 · 2395 阅读 · 2 评论 -
用代码和UML图化解设计模式之《创建者模式》
今天学习了建造者模式,目前较为复杂的一个模式之一。但是思考起来就觉得她很像抽象工厂的生产者模式。 但是比生产者多了一个导演着的身份,这个指挥着建造者去生产谁。。。 所以,这个模式还是挺有意思的。直接上UML图。 我们生产两种商品,两种商品是有厂家决定,商品只决定具有哪些。因此,这时候是有生产者说了算。 但是还有一个更高级的指挥者,那就是 导演类。安排生产。原创 2012-10-24 00:27:43 · 2201 阅读 · 0 评论 -
用代码和UML图化解设计模式之《桥接模式》
桥接模式就是 独立和实现相分离。不同的厂家生产不同的产品。。。。产品和厂家有这组合的关系。上代码// Bridge.cpp : 定义控制台应用程序的入口点。/////************************************************************************/ /* @filename Bridge原创 2012-10-25 00:44:54 · 2948 阅读 · 0 评论 -
用代码和UML图化解设计模式之《观察者模式》
观察者模式应该说比较简单,就是将不同观察者注册到被观察者内部,被观察者做了什么动作,都会通知到被观察者。。。 代码中,被观察者也可以形成接口,有不同的子类,被观察,更灵活一些。。。 下面代码 // Observer.cpp : 定义控制台应用程序的入口点。//********************************************************原创 2012-11-02 14:31:42 · 4256 阅读 · 1 评论 -
用代码和UML图化解设计模式之《命令模式》
一、建立命令队列;二、可以将命令记入日志;三、接收请求的一方可以拒绝;四、添加一个新命令类不影响其它类;命令模式把请求一个操作的对象与知道怎么操行一个操作的对象分开命令模式感觉就是一个领导接受客户端的命令,让底下的人去做,但是比较特殊。继承命令 上图 上代码 // Command.cpp : 定义控制台应用程序的入口点。////************原创 2012-10-25 22:55:28 · 3738 阅读 · 0 评论 -
Apache Mesos总体架构
1. 前言同其他大部分分布式系统一样,Apache Mesos为了简化设计,也是采用了master/slave结构,为了解决master单点故障,将master做得尽可能地轻量级,其上面所有的元数据可以通过各个slave重新注册而进行重构,故很容易通过zookeeper解决该单点故障问题。(什么是apache mesos?参考:《统一资源管理与调度平台(系统)介绍》,本文分析基于M转载 2015-12-07 20:18:11 · 2684 阅读 · 0 评论