<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[lcl的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/lclflash</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; lclflash]]></copyright><item><title><![CDATA[qt 实现单例]]></title><link>https://blog.youkuaiyun.com/lclflash/article/details/19068111</link><guid>https://blog.youkuaiyun.com/lclflash/article/details/19068111</guid><author>lclflash</author><pubDate>Tue, 11 Feb 2014 09:12:03 +0800</pubDate><description><![CDATA[头文件：
class ConnectionManager 
{ 
public: 
    static ConnectionManager *instance();
};
实现文件：
Q_GLOBAL_STATIC(ConnectionManager, connectionManager) 
ConnectionManager *ConnectionManager::instan]]></description><category></category></item><item><title><![CDATA[侃中介者模式（Mediator）]]></title><link>https://blog.youkuaiyun.com/lclflash/article/details/8860844</link><guid>https://blog.youkuaiyun.com/lclflash/article/details/8860844</guid><author>lclflash</author><pubDate>Sat, 27 Apr 2013 21:01:42 +0800</pubDate><description><![CDATA[侃中介者模式
作用:
       用一个中介对象来封装一系列的对象操作。中介者使各对象不需要显式地相互交互，从而使其耦合松散，而且可以独立地改变它们之间的交互。
正文：
       中介者模式是一个简单易用的模式。也许很多人在实际的项目中都已经用到过了，只是不知道它就是中介者模式。它把多对多的交互变成了一对多的交互，从而简化的交互，理清了思路。
       让我们来看个例子。]]></description><category></category></item><item><title><![CDATA[消息映射深度探索(5)：总结]]></title><link>https://blog.youkuaiyun.com/lclflash/article/details/8860827</link><guid>https://blog.youkuaiyun.com/lclflash/article/details/8860827</guid><author>lclflash</author><pubDate>Sat, 27 Apr 2013 20:58:52 +0800</pubDate><description><![CDATA[转自：http://blog.youkuaiyun.com/hjsunj/article/details/2028597
孰优孰劣

上面我们讨论了实现消息映射的两种方案：

1. 使用消息映射表
2. 使用虚函数

在效率上我们可以看出前者胜出，内存使用上后者胜出（前提是后者不使用查找表替换switch...case）。
所以看其来大家各有优劣。

使用消息映射表必然要使用宏，除非事先]]></description><category></category></item><item><title><![CDATA[消息映射深度探索(4)：职责链模式 - 使用虚函数替换映射表]]></title><link>https://blog.youkuaiyun.com/lclflash/article/details/8860823</link><guid>https://blog.youkuaiyun.com/lclflash/article/details/8860823</guid><author>lclflash</author><pubDate>Sat, 27 Apr 2013 20:58:17 +0800</pubDate><description><![CDATA[转自：http://blog.youkuaiyun.com/hjsunj/article/details/2028597
下面我们将介绍另一种实现消息映射的方式：职责链模式

#include 
#include 
#include 

#define PRINT( msg ) { std::cout 
#define FUNC( func ) void func() { PRINT( #fu]]></description><category></category></item><item><title><![CDATA[消息映射深度探索(3)：使用宏简化操作]]></title><link>https://blog.youkuaiyun.com/lclflash/article/details/8860820</link><guid>https://blog.youkuaiyun.com/lclflash/article/details/8860820</guid><author>lclflash</author><pubDate>Sat, 27 Apr 2013 20:57:45 +0800</pubDate><description><![CDATA[转自：http://blog.youkuaiyun.com/hjsunj/article/details/2028597
消息映射网的建立可以用宏定义出来，以简化派生类的操作：

#include 
#include 
#include 

#define PRINT( msg ) { std::cout 
#define FUNC( func ) void func() { PRINT( #]]></description><category></category></item><item><title><![CDATA[消息映射深度探索(2)：MFC的做法 - 使用消息映射表]]></title><link>https://blog.youkuaiyun.com/lclflash/article/details/8860818</link><guid>https://blog.youkuaiyun.com/lclflash/article/details/8860818</guid><author>lclflash</author><pubDate>Sat, 27 Apr 2013 20:56:53 +0800</pubDate><description><![CDATA[转自：http://blog.youkuaiyun.com/hjsunj/article/details/2028597
在MFC被成功做出来之前，一个最简单的想法就是使用虚函数，为每个消息定制一个虚函数，下面是个可能的实现：

#include 
#include 
#include 

#define PRINT( msg ) { std::cout 
#define FUNC( func]]></description><category></category></item><item><title><![CDATA[消息映射深度探索(1)：基础面]]></title><link>https://blog.youkuaiyun.com/lclflash/article/details/8860817</link><guid>https://blog.youkuaiyun.com/lclflash/article/details/8860817</guid><author>lclflash</author><pubDate>Sat, 27 Apr 2013 20:56:02 +0800</pubDate><description><![CDATA[转自：http://blog.youkuaiyun.com/hjsunj/article/details/2028597
消息映射这项技术，给消息横向(多个类对象)或纵向(继承树)流动的机会。

此技术最初之发展动机是为了简化win32程序的消息处理过程，后来也被应用到网络程序的消息处理。一旦某个消息到达win32消息处理函数，此函数就会 使用一个switch...case映射网将此消息映射至相应处理函]]></description><category></category></item><item><title><![CDATA[简单单体模板类的实现（非线程安全）]]></title><link>https://blog.youkuaiyun.com/lclflash/article/details/8860804</link><guid>https://blog.youkuaiyun.com/lclflash/article/details/8860804</guid><author>lclflash</author><pubDate>Sat, 27 Apr 2013 20:54:06 +0800</pubDate><description><![CDATA[直接上代码
#ifndef _SINGLETON_H_
#define _SINGLETON_H_

template 
class CSingleton
{
public:
	static T *instance() 
	{
		static T *_instance = NULL;
		if (_instance == NULL)
			_instance = new]]></description><category></category></item><item><title><![CDATA[以查找表取代switch...case]]></title><link>https://blog.youkuaiyun.com/lclflash/article/details/8860587</link><guid>https://blog.youkuaiyun.com/lclflash/article/details/8860587</guid><author>lclflash</author><pubDate>Sat, 27 Apr 2013 19:53:39 +0800</pubDate><description><![CDATA[转自：http://blog.youkuaiyun.com/hjsunj/article/details/2028597
传统的以多态取代switch...case

Martin Flower的著作《重构》告诉我们应该以多态取代switch...case,比如一个经典的Shape绘图的例子：

void Draw( Shape* shape ) {
    switch( shape.type]]></description><category></category></item><item><title><![CDATA[工厂方法(Factory Method)之追根究底]]></title><link>https://blog.youkuaiyun.com/lclflash/article/details/8860584</link><guid>https://blog.youkuaiyun.com/lclflash/article/details/8860584</guid><author>lclflash</author><pubDate>Sat, 27 Apr 2013 19:51:44 +0800</pubDate><description><![CDATA[转自：http://blog.youkuaiyun.com/hjsunj/article/details/2028597
 
简介

工厂方法，通常又被称作虚构造函数，给一个ID，就可以产出一个对象。
了解设计模式的人都知道这样一份臭名昭著的实现：

// ----------------------------------------------------------------------]]></description><category></category></item><item><title><![CDATA[工厂模式的模板实现]]></title><link>https://blog.youkuaiyun.com/lclflash/article/details/8858829</link><guid>https://blog.youkuaiyun.com/lclflash/article/details/8858829</guid><author>lclflash</author><pubDate>Sat, 27 Apr 2013 14:05:59 +0800</pubDate><description><![CDATA[转载请注明：http://blog.youkuaiyun.com/lclflash
源码面前了无秘密
#ifndef _ELEMENTFACTORY_H_
#define _ELEMENTFACTORY_H_

#include 
#include 

class IElement;

class IElementCreator
{
public:
	virtual IElement* create()]]></description><category></category></item><item><title><![CDATA[DynObj - C++ Cross Platform Plugin Objects]]></title><link>https://blog.youkuaiyun.com/lclflash/article/details/8856937</link><guid>https://blog.youkuaiyun.com/lclflash/article/details/8856937</guid><author>lclflash</author><pubDate>Fri, 26 Apr 2013 23:07:27 +0800</pubDate><description><![CDATA[By Arne
 Steinarson, 27
 Sep 2007


















   4.95 (32
 votes)






 











Download
 DynObj demo - 241.8 KB
Download
 DynObj source - 614.5]]></description><category></category></item><item><title><![CDATA[Simple Plug-in Architecture in Plain C]]></title><link>https://blog.youkuaiyun.com/lclflash/article/details/8856934</link><guid>https://blog.youkuaiyun.com/lclflash/article/details/8856934</guid><author>lclflash</author><pubDate>Fri, 26 Apr 2013 23:06:49 +0800</pubDate><description><![CDATA[Introduction
This article explains how to write an application using architecture that supports plug-ins. We would be doing this using plain C. The concepts that are explained can be used to implemen]]></description><category></category></item><item><title><![CDATA[Building Your Own Plugin Framework]]></title><link>https://blog.youkuaiyun.com/lclflash/article/details/8856904</link><guid>https://blog.youkuaiyun.com/lclflash/article/details/8856904</guid><author>lclflash</author><pubDate>Fri, 26 Apr 2013 23:03:43 +0800</pubDate><description><![CDATA[Building Your Own Plugin Framework

A cross-platform plugin framework for C/C++

Dr. Dobb's - November 25, 2007
Gigi Sayfan

From ddj.com

Gigi Sayfan specializes in cross-platform object-ori]]></description><category></category></item><item><title><![CDATA[POCO Universal Plug and Play]]></title><link>https://blog.youkuaiyun.com/lclflash/article/details/8856897</link><guid>https://blog.youkuaiyun.com/lclflash/article/details/8856897</guid><author>lclflash</author><pubDate>Fri, 26 Apr 2013 23:01:25 +0800</pubDate><description><![CDATA[Universal Plug and Play


A modular and extensible C++ framework for implementing UPnP™ capable devices and applications. Based on the POCO C++ Libraries and the Applied Informatics Remoting framew]]></description><category></category></item><item><title><![CDATA[C++编写动态插件应注意的问题]]></title><link>https://blog.youkuaiyun.com/lclflash/article/details/8856882</link><guid>https://blog.youkuaiyun.com/lclflash/article/details/8856882</guid><author>lclflash</author><pubDate>Fri, 26 Apr 2013 22:56:13 +0800</pubDate><description><![CDATA[C++编写动态插件应注意的问题   

2012-02-13 11:30:32|  分类： VC++
 & MFC|字号 订阅









1- 插件导出函数设计成C形式的也就是在函数前加 extern "C",这样保证动态连接的时候不会出现找不到名字的情况.

 2- 一定要保证代码绝缘,中间接口一定要传递NATURAL类型或者纯虚指针,否则会因为一些细微的类]]></description><category></category></item><item><title><![CDATA[C++ 插件框架 Pluma Framework]]></title><link>https://blog.youkuaiyun.com/lclflash/article/details/8856876</link><guid>https://blog.youkuaiyun.com/lclflash/article/details/8856876</guid><author>lclflash</author><pubDate>Fri, 26 Apr 2013 22:54:27 +0800</pubDate><description><![CDATA[Pluma 是一个开源的C++插件管理框架，以助于在应用程序中动态载入DLL而无需在意内部实现，它是轻量级、简化设计的。



主要特性有：

A 高品质：

    面向对象
    跨平台；
    易于使用；
    容易集成；

B 富功能：

    动态载入插件（DLL）；
    使用工厂模式（Factory Pattern）；
    插件版本控制]]></description><category></category></item><item><title><![CDATA[插件式设计的架构模型与实例]]></title><link>https://blog.youkuaiyun.com/lclflash/article/details/8856862</link><guid>https://blog.youkuaiyun.com/lclflash/article/details/8856862</guid><author>lclflash</author><pubDate>Fri, 26 Apr 2013 22:51:38 +0800</pubDate><description><![CDATA[插件式设计的架构模型与实例
----Do not call us, we will call you
 
 
转载时请注明出处：http://blog.youkuaiyun.com/absurd

插件式设计近年来非常流行，其中eclipse起了推波助澜的作用，提到插件式就会不由自主的想到eclipse。其实插件式设计并不是什么新事物，早在几十年前就有了。像X
 Server就是基于插件式设计的]]></description><category></category></item><item><title><![CDATA[C++插件机制的一种实现方法（对象工厂）]]></title><link>https://blog.youkuaiyun.com/lclflash/article/details/8856850</link><guid>https://blog.youkuaiyun.com/lclflash/article/details/8856850</guid><author>lclflash</author><pubDate>Fri, 26 Apr 2013 22:49:30 +0800</pubDate><description><![CDATA[背景

在我们的实际开发过程中，经常会开发一些插件，比较常见的例子如：给你 DataHandler，它是一个抽象类，提供一些数据操作的接口，然后插件开发者就需要继承DataHandler，并按需求实现对应的接口，将其作为插件，编译到最终的二进制程序中，最后通过配置文件指定生效该插件。



帮助





1

2

3

4

5

6

7]]></description><category></category></item><item><title><![CDATA[用C++实现插件体系结构]]></title><link>https://blog.youkuaiyun.com/lclflash/article/details/8856823</link><guid>https://blog.youkuaiyun.com/lclflash/article/details/8856823</guid><author>lclflash</author><pubDate>Fri, 26 Apr 2013 22:43:11 +0800</pubDate><description><![CDATA[本文讨论一种简单却有效的插件体系结构，它使用C++,动态链接库，基于面向对象编程的思想。首先来看一下使用插件机制能给我们带来哪些方面的好处，从而在适当时候合理的选择使用。

1. 增强代码的透明度与一致性：

因为插件通常会封装第三方类库或是其他人编写的代码，需要清晰地定义出接口，用清晰一致的接口来面对所有事情。你的代码也不会被转换程序或是库的特殊定制需求弄得乱七糟。

2. 改善工程]]></description><category></category></item></channel></rss>