C++设计模式之 简单工厂模式讲解(历史上最简单明白的例子)

工作之余,在看资料过程中发现一个极易理解的简单工厂模式的例子,自己亲自试练一番,感觉对这个设计模式不熟悉的朋友,
一看马上就知道是什么回事了。

简单工厂模式根据提供给它的数据,返回几个可能类中的一个类的实例。通常它返的类都有一个共同的你类和共同的方法,
但每个方法执行的任务不同,而且根据不同的数据进行了优化。

简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。


下面进行一个代码示例:
    
    public class getName
    {
        private string _fName, _lName;

        public string fName { get; set; }

        public string lName { get; set; }
    }
    定义一个类,返回带有空格在名字中间的人的姓与名
    public class fristName : getName
    {
        public fristName(string name)
        {
            int i=name.Trim().IndexOf(' ');
            if (i > 0)
            {
                fName = name.Substring(0, i).Trim();
                lName = name.Substring(i + 1).Trim();
            }
            else
            {
                fName = name;
                lName = "";
            }
        }
    }
    定义一个类,返回带有逗号在名字中间的人的姓与名
    public class lastName : getName
    {
        public lastName(string name)
        {
            int i = name.Trim().IndexOf(',');
            if (i > 0)
            {
                lName = name.Substring(0, i).Trim();
                fName = name.Substring(i + 1).Trim();
            }
            else
            {
                lName = name;
                fName = "";
            }
        }
    }

下面创建简单的工厂模式的类:
    public class nameFac
    {
        public nameFac()
        { }

        public static getName GetName(string name)
        {
            int i = name.IndexOf(',');
            if (i > 0)
            {
                return new lastName(name);
            }
            else
            {
                return new fristName(name);
            }
        }
    }

通过一个nameFac工厂类把所有的业务流程都耦合在一起。在界面层使用的时候只需代用到工厂类就可以返回结果。
    getName gn = nameFac.GetName("Kelly Chen");
    richTextBox1.Text = gn.fName + "  ,   " + gn.lName;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436066.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于html和javascript在浏览器中的加载顺序问题的讨论(zz)

前一阵子横扫了javascript,当时自我感觉良好。现在一想,又觉得没什么。今天的任务是把asp.net ajax中客户端页面生命周期那一章研究完。然而,因为这一章的内容使我产生了一些迷惑。这些疑惑在书中都没有只字提及。 一、html页面的详细加载过程…

linux中sybase删除数据库,Linux_Sybase ASE数据库的常见问题解答,1 数据库占用磁盘空间的形式 - phpStudy...

Sybase ASE数据库的常见问题解答1 数据库占用磁盘空间的形式是什么?Master数据库的作用是什么?如果master失败后果如何?设备文件. 存储系统表, 系统将无法使用, 除非重建master库2 段的实质是什么?已被SYBASE中对象使用的段可否被…

【转】.NET Core 可移植类库PCL Portable Class Library详解

转自:https://www.kaifaxueyuan.com/server/dotnet-core/dotnet-core-portable-class-library.html 在这一章中,我们将讨论什么是PCL (可移植类库),以及为什么我们需要PCL。为了理解这个概念,让我们打开上一章创建的类库项目文件夹…

sql表的所有者

今天建立了一个表,名为tmp_pactrebate,默认的所有者为dbo,如果想改成所有者是自己的名字,例如:wcj 在查询分析器中执行这句话即可 EXEC sp_changeobjectowner dbo.tmp_pactrebate, wcj 改后的表名为:wcj.tmp_pactrebate select * from wcj.tm…

loadrunner linux 端口,Linux下loadrunner generator的安装

Loadrunner linux generator version:9.5Step1:建立一个普通用户loadrunner,目录:/home/loadrunner,将安装文件考到/home/loadrunner下面,但是需要使用root用户安装,./installer.sh –consoleSt…

设计模式C++实现(4)——原型模式、模板方法模式

软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书&#xff0…

【转】医疗业务学习笔记--DICOM协议的基础内容!!!!!!!!!!

转自:医疗业务学习笔记--DICOM协议的基础内容 - 知乎 本文首发于“雨夜随笔”公众号,欢迎关注。 DICOM协议是医疗领域对如何处理、存储、打印和传输医疗图片的一系列标准。DICOM是 Digital Imaging and Communications in Medicine 的缩写,…

linux去掉u盘写保护,最全面win10系统下u盘写保护怎么去掉

U盘写保护就是只能读取U盘中的内容,但是却不能修改或者将其它文件保存在U盘,有时候U盘写保护妨碍我们使用,有些朋友想要将其接除,对此,我给大家整理了win10移除写保护的方法,希望能帮助到你U盘是通过USB接口…

PHPBB安装

安装phpbb: 1、先下载phpbb安装包,根据自己需要下载中文包或英文包; 2、上传到phpmysql空间里,解压缩; 3、建立数据库; 4、在地址栏里输入自己的域名http://example.com/ 5、根据提示安装,其中会…

设计模式C++实现(5)——桥接模式

软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书&#xff0…

【转】CT基本概念(必须掌握)!!!!!!!!!!!!!!

转自:http://www.bmecn.com/wenku/knowledge/988.html 1.像素(Pixel)和体素(Voxel) 像素(Pixel)是构成图像的基本单位,即图像可被分解成的最小的独立信息单元。因为图像是二维的&a…

linux下sublime安装目录在那,linux下sublime text 3安装到配置

1. Sublime Text 3的下载安装到官方网站上http://www.sublimetext.com/3下载64位(系统位64位)的.deb安装包(http://c758482.r82.cf2.rackcdn.com/sublime-text_build-3059_amd64.deb),下载后双击安装即可。安装好之后,通过命令subl即可打开程序&#xff…

推荐笔记本用户使用的硬盘。。。2.5”战胜台式机硬盘 日立7K320-250GB

2.5”战胜台式机硬盘 日立7K320-250GB 相关评测文章参考:http://www.beareyes.com.cn/2/lib/200808/07/20080807034_8.htm 转载于:https://www.cnblogs.com/bingdongli/archive/2008/10/05/1304169.html

设计模式C++实现(6)——适配器模式

软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书&#xff0…

【转】dcmtk程序包综述(1)!!!!!!

转自:https://blog.csdn.net/shenziheng1/article/details/70053152 1.前言 本文对dcmtk程序包做了简单介绍,包括主要接口类的简单说明,可用的工具以及一些例子。下一步工作准备详细分析每个程序包中的接口类功能,并结合源码和d…

edusoho linux 500错误,EduSoho网校系统如何处理500 Internal Server Error? - EduSoho官网

500 代表着服务器处理异常,因此需要找出服务报的异常。如何找出异常?根据框架提供的机制,只需要在web/app.php中将开发模式打开,就可以看到具体异常。$kernel new AppKernel(prod, false);改成$kernel new AppKernel(prod, true…

SQL大全

--语 句              功 能 --数据操作 SELECT   --从数据库表中检索数据行和列 INSERT   --向数据库表添加新数据行 DELETE   --从数据库表中删除数据行 UPDATE   --更新数据库表中的数据 --数据定义 CREATE TABLE  --创建一个数据库表 …

设计模式C++实现(7)——装饰模式

装饰模式:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。有时我们希望给某个对象而不是整个类添加一些功能。比如有一个手机,允许你为手机添加特性,比如增加挂件、屏幕贴膜等。一种灵活的设…

【转】dcmtk程序包综述(2)!!!!!

转自:https://shenchunxu.blog.csdn.net/article/details/70054161 有删改 1.dcmnet程序包 dcmnet是一个网络库及可用工具。 该模块包含了实现DICOM网络通信的所有函数集,即:DICOM上层有限状态机(DICOM Upper Layer Finite State Machine)&…

较为周全的Asp.net提交验证方案 (下)

接上篇。 下面要对这个生成的“提交验证”类进行功能扩展,通过.Net的“部分类”或“扩展方法”技术都可以轻松实现,这里采用的是“部分类”技术: 引用生成的ADO.NET Entity Framework数据模型的命名空间,且声明为部分类。 书写静态…