博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式1:简单工厂模式学习
阅读量:4972 次
发布时间:2019-06-12

本文共 1361 字,大约阅读时间需要 4 分钟。

算起来,俺从开始学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来完成,这样最大化的减轻与客户端的耦合。根据我的理解,在应用这种模式的时候,最重要的部分就是如何对方法进行抽象,并进而得到一个基类(作为接口类)。

转载于:https://www.cnblogs.com/liqilei/archive/2010/08/04/1792660.html

你可能感兴趣的文章
reactjs学习一(环境搭配react+es6+webpack热部署)
查看>>
Linux 高性能服务器编程——高级I/O函数
查看>>
安卓天天练练(二)相对布局和帧布局
查看>>
更新与升级 FreeBSD
查看>>
File.Exists 文件不存在 Or FileNotFoundException
查看>>
BZOJ 1529 [POI2005]ska Piggy banks:并查集
查看>>
java多态与异常处理——动手动脑
查看>>
软件测试技术HW03-printPrimes()
查看>>
SQL Server2008附加数据库之后显示为只读时解决方法
查看>>
linux vi编辑
查看>>
IO流--复制picture ,mp3
查看>>
linux 环境变量
查看>>
JQuery UI datepicker 使用方法
查看>>
转:网页启用Gzip压缩 提高浏览速度
查看>>
poj 3321(树状数组)
查看>>
《Java程序设计》第六周学习总结
查看>>
Linux正则表达式
查看>>
Mysql tinyint长度为1时在java中被转化成boolean型
查看>>
【刷题】BZOJ 3930 [CQOI2015]选数
查看>>
SQL分页排序的实现与分页数据重复问题——以Oracle rownum为例
查看>>