面向对象编程设计模式--简单工厂模式讲解(历史上最简单明白的例子)

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

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

简单工厂模式是属于创建型模式,又叫做静态工厂方法(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/304655.shtml

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

相关文章

.NET 6 Preview 1 开箱,带你体验新版本

最近 .NET 6 Preview 1 发布了,.NET 统一是此版本的核心。大家可以读一下原文博客:https://devblogs.microsoft.com/dotnet/announcing-net-6-preview-1/.NET 6.0 SDK 和 Runtime 下载地址:https://dotnet.microsoft.com/download/dotnet/6.0…

redis 清空缓存_「镜头回放」简直了!spring中清除redis缓存导致应用挂死

异常场景springWeb应用一直运行正常,同事最近反应,每次版本更新完毕,刷新缓存,就会导致应用挂死。只有重启redis应用才恢复正常。项目概况springWeb项目,常用配置表做了redis缓存,配置表中只有少量数据&…

25岁社招进阿里,从电商到有赞新零售,他仅1年就打开了马云一直想做的新领域!

最近关于「新零售」的声音此起彼伏:阿里巨资收购高鑫零售,腾讯确认入股永辉超市……自2016年10月马云第一次提出了「新零售」概念之后,各巨头跑马圈地,线下成为了必争之地,新零售的蓝海才刚刚打开。而李星,…

优美的测试代码 - 行为驱动开发(BDD)

可理解的代码非常重要,测试代码也是如此。在我看来,优秀的测试代码,必须做到一个重要的事情就是保持测试逻辑的清晰。一个完整的测试案例通常包括三个部分:1. SetUp2. Exercise3. Verifiy4. TearDown一 个测试案例如果能清晰的区分…

C#连接MySQL数据库实例

项目目的:连接mysql查询数据并将数据显示到界面的datagridview里面.Step1:添加动态链接库文件Visual Studio,在 项目(右键)-管理NuGet程序包(N) 然后在浏览里面搜索MySql.Data并进行安装。Step2:using所需要的库using MySql.Data.MySqlClient;step3&…

java字符串比大小_Java字符串比较(3种方法)

字符串比较是常见的操作,包括比较相等、比较大小、比较前缀和后缀串等。在 Java 中,比较字符串的常用方法有 3 个:equals() 方法、equalsIgnoreCase() 方法、 compareTo() 方法。下面详细介绍这 3 个方法的使用。equals() 方法equals() 方法将…

链接服务器 慢_redis服务器cpu100%的原因和解决方案

首先引起cpu100%可能的几大原因:1.redis连接数过高2.数据持久化导致的阻塞3.主从存在频繁全量同步4.value值过大5.redis慢查询为了模拟redis服务器cpu100%,临时买了一台阿里云ecs,并把那天清空前的redis备份还原到服务器上。下面我们按照顺序…

有人问我:AI这么火,要不要去追赶AI的热潮?

12月14日,吴恩达发布微博:我很高兴地宣布Landing.ai的成立,开始进入AI产业。 作为一家人工智能(AI)公司,Landing.ai旨在帮助企业在人工智能时代实现转型。这一动作让人们对AI的关注度在2017年的末尾又一次升…

Exchange2003管理

邮件的管理详细见邮件转载于:https://blog.51cto.com/ruzhulinux/187799

过完年,又不想上班了?

大家新年好,我是Z哥。每次过完年,不少人会多增加一份焦虑,这份焦虑表面上看是“不想上班”,但实际上可能是职业规划的缺失导致。因为缺少对未来的预期、憧憬,导致对自己的工作没有热情。这种情况的另一种叫法是「职业倦…

15天助你掌握问卷统计与Spss实战

最近总是有小伙伴咨询超模君关于数据分析的问题,比如数据分析是什么、怎样才能速成数据分析等等,今天超模君就抽个空跟大家谈谈数据分析那些事儿。首先,我们先来了解了解小伙伴所提到的数据分析。数据分析是指用适当的统计分析方法对收集来的…

aswing学习笔记3-在JPanel中,如何将.png格式的图片设置为背景?

在JPanel中,如何将.png格式的图片设置为背景?2009-03-04 19:21在JPanel中,如何将.png格式的图片设置为背景? 发表于 : 周三 6月 04, 2008 3:53 pm由 tvrcaiyy在JPanel中,如何将.png格式的图片设置为背景?能…

在.NET Core 中使用 FluentValidation 进行规则验证

不用说,规则验证很重要,无效的参数,可能会导致程序的异常。如果使用Web API或MVC页面,那么可能习惯了自带的规则验证,我们的控制器很干净:public class User {[Required]public string FirstName { get; se…

scrcpy投屏_安卓投屏利器——PC一键控制多台手机

点击关注,我们共同每天进步一点点!之前给大家介绍了投屏开源工具scrcpy(Scrcpy投屏,在电脑上流畅操控你的手机!),今天要介绍的投屏工具是在scrcpy的基础上进行了二次开发,使用更加友好。《安卓投屏》基于Gi…

java emoji编码转换_java转换emoji表情

/*** Description 将字符串中的emoji表情转换成可以在utf-8字符集数据库中保存的格式(表情占4个字节,需要utf8mb4字符集)* param str* 待转换字符串* return 转换后字符串* throws UnsupportedEncodingException* exception*/public static String emojiConvert1(St…

【干货】通俗理解神经网络中激活函数作用

推荐阅读时间8min~13min主要内容:通俗理解激活函数,主要来自我在学习会的slides,讲解了激活函数的非线性能力和组合特征的作用下面我分别对激活函数的两个作用进行解释。1加入非线性因素,解决非线性问题好吧,很容易能够…

创建第一个WCF程序

WCF的三大核心是ABC A代表Address-where(对象在哪里) B代表Binding-how(通过什么协议取得对象) C代表Contact(契约)-what(定义的对象是什么,如何操纵) 创建一个空的解决方…

.NET微服务最佳实践eShopOnContainers

本文翻译自微软Docs, 内嵌译者多年使用的参悟,如理解有误,请不吝赐教。微软与社区专家合作,开发了功能齐全的云原生微服务示例应用eShopOnContainers。该应用旨在展示使用.NET、Docker以及可选的Azure,Kubernetes技术来…

爬取猎聘python_爬取猎聘大数据岗位相关信息--Python

猎聘网站搜索大数据关键字,只能显示100页,爬取这一百页的相关信息,以便做分析。__author__ ‘Fred Zhao‘import requestsfrom bs4 import BeautifulSoupimport osimport csvclass JobSearch():def __init__(self):self.headers {‘User-Ag…

java string底层实现_Java-学习日记(Shell与String底层原理)

Java杂记-2020.08.07Test中测试所有getter,setter方法最近一周在写codereview,相关技术是kmock1.0.19,gradlebuild.gradle中配置文件testCompile pl.pojo:pojo-tester:0.7.6testCompile(junit:junit:4.12)testCompile(kmock:kmock:1.0.19)Test中的使用&a…