今天学习一下简单工厂模式:
为了通俗易懂,我们以陈老师摄影工作室为例:
首先陈老师摄影工作室,主要的摄影对象是自己女朋友,
而陈老师对自己女朋友也是有要求的,要求当然是做一些那个事情了,为此
我们要首先定义一个陈老师女朋友的接口,如下:
interface GuanXiGirlFriend
{
void MakeSomeThings();
}
有了老师的女朋友的接口了,只有符合陈老师女朋友接口的人,才能算是陈老师的女朋友,此时,张柏芝登场了,张柏芝首先要答应和陈老师做那个事情,为此,我们定义ZhangBoZhi的类,并实现女朋友接口,代码如下所示:
class ZhangBoZhi:GuanXiGirlFriend
{
public void MakeSomeThings()
{
Console.Write("张柏芝和陈老师在一起的时光里,跟陈老师拍摄了艳照");
}
}
陈老师是不会趴在一个女人身上一辈子的,玩腻了,自然是踹掉了,然后另一位符合要求的女友登场了,她是谁呢?恭喜你答对了,是阿娇,阿娇首先也符合了陈老师女友的要求,实现了女友的接口。
代码如下所示:
class AJiao:GuanXiGirlFriend
{
public void MakeSomeThings()
{
Console.Write("阿娇和陈老师在一起的时光里,跟陈老师拍摄了艳照,事后说出了很傻很天真");
}
}
时间长了,陈老师对阿娇又失去了兴趣,于是找了杨永晴,首先杨永晴也实现了陈老师的女友接口,定义如下:
class YanYongQing : GuanXiGirlFriend
{
public void MakeSomeThings()
{
Console.Write("杨永晴和陈老师在一起的时光里,跟陈老师拍摄了艳照,但是事后一直在一起,也没有分手");
}
}
陈老师既然开摄影工作室,那肯定是积攒了不少照片,不会因为女友分手而把照片还给她们。于是,就有了笔记本坏掉的事件,后来的事情,大家都知道了。
为此,我们定义了一个陈老师摄影工作室的工厂类,专门往外流传艳照,代码如下所示:
class GuanXiSheYingFactory
{
public static GuanXiGirlFriend createGuanXiGirlFriend(string strName)
{
GuanXiGirlFriend girlFriend = null;
switch (strName)
{
case "张柏芝":
girlFriend = new ZhangBoZhi();
break;
case "阿娇":
girlFriend = new AJiao();
break;
default:
girlFriend = new YanYongQing();
break;
}
return girlFriend;
}
}
此时,我们作为一个小小小网民,想看陈老师女友的艳照,主要向陈老师摄影工作室索取就是了,代码如下所示:
class Program
{
static void Main(string[] args)
{
GuanXiGirlFriend girlFriend = null;
girlFriend = GuanXiSheYingFactory.createGuanXiGirlFriend("张柏芝");
girlFriend.MakeSomeThings();
}
}
此时,相信大家都看明白了,如果陈老师有N多女友,拍了N多艳照,发现一个,我们就实现一个陈老师女友的接口就可以了。这就是简单工厂模式的好处,易维护,易扩展,可复用。
分享到:
相关推荐
工厂模式是一种设计模式,主要用来解决对象创建的问题,特别是当有多个相关联的具体类需要实例化,而这些实例化操作可能会随着需求的变化而变化时。工厂模式的核心思想是定义一个创建对象的接口(或者抽象类),但让...
Java简单工厂创建性模式是一种常用的面向对象设计模式,它的主要目的是通过封装实例化过程,将对象的创建与使用解耦,使得代码更加灵活且易于维护。在这个模式中,工厂类负责根据输入条件创建合适的对象,而客户端只...
陈老师云点播 v5.0说明:1:陈老师云点播源自迅雷云播,利用目前风靡全球的云端存储技术来实现视频文件直接在线播放。2:陈老师云点播支持ed2k、magnet、thunder链接,http、ftp链接,BT种子40位Hash值,xlpan地址...
陈老师排课软件12A(正式版)是传统手工排课(利用磁牌在铁质黑板上排课)的基础上开发的自动排课软件,适合于小学、初中、普高、职高、大中专院校的教务排课。特别能排新高考(4选2、6选3、7选3)走班排课时的行政...
从陈老师的讲解中,我们可以深刻理解到Linux内核与硬件之间的紧密关系,特别是关于内存寻址的硬件机制。操作系统作为连接软件与硬件的桥梁,其设计需深度挖掘硬件潜能,而Linux内核的设计则尤为注重这一点,通过清晰...
从给定的文件信息来看,标题、描述以及标签均指向“陈老师讲linux内核8”,这表明内容主要围绕Linux内核的相关知识展开。虽然部分原文内容无法直接解析,但可以推断出以下关键知识点: ### Linux内核基础 Linux...
陈老师排课12A精简正式版是在传统手工排课的基础上开发出来的VB排课程序及EXCEL课表自动打印系统,除能直观地进行普通排课外,还能很好的进行新高考走班排课,能排早晚自习、各类假期补课表,是一种非常快速、高效的...
### 陈老师讲Linux内核7 —— 内核空间与用户空间 #### 一、虚拟地址空间概览 在本课程中,陈老师详细解释了Linux操作系统如何管理虚拟地址空间,尤其是内核空间和用户空间的区别。在现代计算机体系结构中,处理器...
- **简单工厂模式(Simple Factory)**: 它是最简单的工厂模式形式,包含一个静态工厂方法,根据传入的参数返回不同类型的实例。但此模式中工厂类通常会违反“开闭原则”,因为它对添加新产品不友好。 - **工厂方法...
【陈老师INVENTOR培训的种子】是一份全面讲解Autodesk Inventor的教程资源,针对想要学习或提升INVENTOR技能的学习者。Inventor是一款强大的三维机械设计软件,广泛应用于工程、制造和产品设计领域。这个培训内容...
### 陈老师讲Linux内核2 —— IA32寄存器详解 #### 一、引言 在《陈老师讲Linux内核2》中,第二讲深入探讨了IA32架构下的寄存器系统。IA32是Intel 80x86系列的一部分,设计上确保了对16位处理器的支持同时兼容32位...
陈老师作为易佳咨询公司的项目管理顾问和培训师,拥有丰富的经验和专业知识,包括ACCA、PMP、PMI会员和CTA等多重认证,对项目管理有着深入的理解。 首先,项目绩效考核的作用在于它能充当企业的“指挥棒”,指导...
### 陈老师讲Linux内核3 — IA32内存寻址机制详解 #### 内存寻址机制概览 在本章节中,陈老师详细介绍了IA32架构下的内存寻址机制,尤其聚焦于如何在有限的物理内存空间内通过操作系统提供的虚拟地址空间支持大型...
### 陈老师讲Linux内核4:深入理解段机制及其实现 #### 一、段机制的概念及其在Linux中的作用 在计算机体系结构中,**段机制**是一种用于管理内存和提供安全性的方法,它是虚拟地址空间与物理地址空间之间进行映射...
本资源为东北大学陈东岳老师的模式识别课程的课程PPT,本课程以周志华的机器学习和pattern recognize为教材,讲解了一系列机器学习的算法。ppt为英文书写。
自考_儿童发展理论复习整理陈老师.doc
陈老师云点播源自迅雷云点播,用户可以选择联通、电信网络进行观看,云点播又名云播、云播放,云点播网页版是迅雷云播的云点播破解版,利用迅雷云播放的在线加速功能,让您观看视频零等待。 陈老师云点播 5.0 更新内容...
陈老师提供的算法讲义涵盖了多个计算机算法设计与分析的重要主题,包括算法的基本概念、性能评估、不同类型的算法以及NP完全问题等。以下是讲义中的知识点详细解读: 1. 程序性能与复杂性分析 程序性能主要是指程序...
这个系统可能由陈老师设计和开发,旨在为用户提供方便、高效的视频流媒体服务。 【描述】描述中的"基于PHP的陈老师云点播php版源码.zip"暗示了这是一个使用PHP编程语言实现的云点播平台的源代码包。"zip"格式意味着...
陈老师云点播 V3.0,是一款很不错的点播系统的源码,而且该系统的源码比较简单的,非常适合一些新手的使用与学习,也是同行中不错的点播系统的源码,值得大家的学习安装。 说明: 1:陈老师云点播源自迅雷云播,利用...