设计模式1:简单工厂模式学习

算起来,俺从开始学c++到现在,也有大概7年了,即从大一就开始学习c++语言程序设计了。虽然对编程很感兴趣,但由于不是科班(生物医学工程专业),所以锻炼的机会自然较少一些。这期间,零零散散做过一些课程设计:图形图像处理的等等都用到了c++语言,但大多还是依葫芦画瓢,现在回想起来,那时写的code真是惨不忍睹啊。后来读研期间,跟随导师做了两年项目,算是感觉有些入门了。但是现在回想起来,以前项目中所写的c++code,大多还是以面向过程的思维去coding,所以code写的还是很糟糕,很难扩展和维护。回头想想,自己的基础还是不够扎实,而且缺少积累的习惯:从来不写日记,经常有想写博客的想法,但却一直没有实现。这不得不说是一个悲剧。于是乎,在阿里呆了快半年了,感觉还是有必要适时把自己的学习、感受等等记录下来,这样等到俺退出IT之时,也可以回头翻翻看自己都做了些什么。

首先从设计模式开始吧。

最近开始读 《大话设计模式》这本书,感觉相当不错,写的很通俗易懂,很精彩。


简单工厂模式

简单工厂模式是比较容易理解的一种软件设计方法:它所解决的是如何去实例化对象的问题,也就是说,到底要实例化谁,将来会不会增加实例化的对象,将这些容易变化的地方,用一个单独的类来做这个创造实例的过程,这就是工厂factory。
回想起来,俺当初在做一个跟数据采集相关的项目时,遇到一个需求:数据传输板有两种,一种是USB2.0,另外一种是PCI,而程序当中需要同时支持这两种传输板。两种传输板完成的功能是一样的:即将采集的数据源源不断的传输给PC机。对于PC机上的client端来说,它并不需要知道实现传输的细节,因此要最大化的减轻客户端的职责。俺当初并不懂设计模式,对设计模式根本没啥概念,就按照自己的想法,利用c++的虚函数特性,抽象出一个接口类IReader,并依此分别实现了PCI和USB两个reader的子类:

class IReader
{
    virtual void ReadData()=0;

    。。。
};

class PCIReader : public IReader
{
    /*override*/ void ReadData();

    。。。

};

class USBReader : public IReader
{
    /*override*/ void ReadData();

    。。。
};

再实现一个ReaderFactory类:
class ReaderFactory
{
    IReader*  CreateReader(string strMode)
    {
        switch (strMode)
        {
             case "PCI":
                  return new PCIReader();
             case "USB":
                  return new USBReader();
        }
    }
};

所以说,简单工厂模式其实真的很简单:将对外提供同一性质服务的对象的创建交给factory来完成,这样最大化的减轻与客户端的耦合。根据我的理解,在应用这种模式的时候,最重要的部分就是如何对方法进行抽象,并进而得到一个基类(作为接口类)。

posted @ 2010-08-04 23:13  I'm 农民工  阅读(305)  评论(0编辑  收藏  举报