C#设计模式--工厂方法模式
设计模式:
工厂方法模式(Factory Method Pattern)
介绍:简单工厂模式是要在工厂类中通过数据来做个决策,在工厂类中的多个类中实例化出来其中一个要用到的类,做运算。而工厂方法模式则是他的一个的扩展,不在工厂类中做区分从而创建对应的类,而是把这个选择决策权力交给使用类的用户决定。可扩展性比简单工厂模式要好很多
工厂方法模式类图:

工厂方法模式C#代码举例:
MobilePhone类手机类
public abstract class MobilePhone
{
public abstract void print();
}
Iphone 类 苹果手机类
public class Iphone : MobilePhone
{
public override void print()
{
Console.WriteLine("我是苹果手机!");
}
}
XiaoMI 类 小米手机类
public class XiaoMI:MobilePhone
{
public override void print()
{
Console.WriteLine("我是小米手机");
}
}
SmarTisan类 锤子手机类
public class SmarTisan : MobilePhone
{
public override void print()
{
Console.WriteLine("我是锤子手机!");
}
}
MobilePhoneFactory 类 手机工厂类
public abstract class MobilePhoneFactory
{
public abstract MobilePhone Create();
}
IphoneFactory 类 苹果手机工厂类
public class IphoneFactory:MobilePhoneFactory
{
public override MobilePhone Create()
{
return new Iphone();
}
}
XiaoMiFactory类 小米手机工厂类
public class XiaoMiFactory:MobilePhoneFactory
{
public override MobilePhone Create()
{
return new XiaoMI();
}
}
SmarTisanFactory类 锤子手机工厂类
public class SmarTisanFactory:MobilePhoneFactory
{
public override MobilePhone Create()
{
return new SmarTisan();
}
}
测试
(即使每次增加新的品牌,只需要增加新品牌的类,以及对应工厂即可使用,方便扩展)
class Program
{
static void Main(string[] args)
{
//创建苹果手机工厂
MobilePhoneFactory mobilePhoneFactoryIphone = new IphoneFactory();
//苹果手机工厂创建手机
MobilePhone mobilePhoneIphone = mobilePhoneFactoryIphone.Create();
//由苹果工厂创建苹果手机
mobilePhoneIphone.print(); //小米工厂生产小米手机
MobilePhoneFactory mobilePhoneFactoryXiaoMi = new XiaoMiFactory();
MobilePhone mobilePhoneXiaoMi = mobilePhoneFactoryXiaoMi.Create();
mobilePhoneXiaoMi.print(); //锤子手机工厂生产锤子手机
MobilePhoneFactory mobilePhoneFactorySmarTisan = new SmarTisanFactory();
MobilePhone mobilePhoneSmarTisan = mobilePhoneFactorySmarTisan.Create();
mobilePhoneSmarTisan.print(); Console.Read(); }
}
运行结果:

源码工程文件
C#设计模式--工厂方法模式的更多相关文章
- 4. 星际争霸之php设计模式--工厂方法模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- C++设计模式——工厂方法模式
本文版权归果冻说所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.» 本文链接:http://www.jellythink.com/arch ...
- JAVA设计模式--工厂方法模式
工厂方法设计模式 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关.是具体工厂角色必须实现的接口或者必须继承的父类.在java中它由抽象类或者接口来实现.具体工厂角色:它含有和具体业务逻辑有关 ...
- 深入浅出设计模式——工厂方法模式(Factory Method)
介绍在简单工厂模式中,我们提到,工厂方法模式是简单工厂模式的一个延伸,它属于Gof23中设计模式的创建型设计模式.它解决的仍然是软件设计中与创建对象有关的问题.它可以更好的处理客户的需求变化. 引入我 ...
- 设计模式--工厂方法模式(Factory method pattern)及应用
面向对象的好处: 通过封装,继承,多态把程序的耦合度降低. 用设计模式可以使程序更加灵活,容易修改,且易于复用. 1. 工厂方法模式 Define an interface for creating ...
- 我的Java设计模式-工厂方法模式
女朋友dodo闹脾气,气势汹汹的说"我要吃雪糕".笔者心里啊乐滋滋的,一支雪糕就能哄回来,不亦乐乎?! 但是,雪糕买回来了,她竟然说"不想吃雪糕了,突然想吃披萨" ...
- 设计模式 — 工厂方法模式(Factory Method)
在开发系统中,经常会碰到一个问题.现在需要实现的一些功能,但是这个功能模块以后一定是需要扩展的,那么现在开发中就不仅要实现现在的功能,还要考虑以后的扩展.那么为了系统的健壮,扩展就要遵循开闭原则(简单 ...
- Java设计模式—工厂方法模式&抽象工厂模式
工厂方法模式与抽象工厂模式都是设计模式中重要而且常见的模式. 工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 通用类图如下: 在 ...
- 设计模式——工厂方法模式(Factory Method)
原文地址:http://www.cnblogs.com/Bobby0322/p/4179921.html 介绍 在简单工厂模式中,我们提到,工厂方法模式是简单工厂模式的一个延伸,它属于Gof23中设计 ...
随机推荐
- ubuntu安装phpVirtualBox web服务
首先确保已经安装好了 virtualbox,打开了 vboxweb-service $ sudo ls /etc/init.d | grep vboxweb-service 然后, Insta ...
- C# 从类库中获取资源图片,把图片资源保存到类库中
/// <summary> /// 获取资源图片 /// </summary> public class AssemblyHelper { #region 常量 /// < ...
- Redis 缓存 + Spring 的集成示例(转载)
1. 依赖包安装 pom.xml 加入: <dependency> <groupId>org.springframework.data</groupId> < ...
- 说说PHP中foreach引用的一个坑
From: http://blog.csdn.net/yipiankongbai/article/details/45307767 先来看看下面这段代码: <?php $arr = array( ...
- ubuntu14.04_64位安装tensorflow-gpu
第一步(可直接跳到第二步):安装nvidia显卡驱动 linux用户可以通过官方ppa解决安装GPU驱动的问题.使用如下命令添加Graphic Drivers PPA: sudo add-apt-re ...
- iOS :UIPickerView reloadAllComponets not work
编辑信息页面用了很多选择栏,大部分都用 UIPickerView 来实现.在切换数据显示的时候, UIPickerView 不更新数据,不得其解.Google 无解,原因在于无法描述自己的问题,想想应 ...
- 一则Gedit死机引起的错误之解决
一次,虚拟机中CentOS不明原因死机了,终端打开不能操作,SecureCRT和从SecureCRT中运行的托关于本机Windows下的Xming下的gedit也死掉了,无奈只能强制关机.重新启动后其 ...
- 通过tarball形式安装HBASE Cluster(CDH5.0.2)——如何配置分布式集群中的zookeeper
集群安装总览参见这里 Zookeeper的配置 1,/etc/profile中加入zk的路径设置,见上面背景说明. 2,进入~/zk/conf目录,复制zoo_sample.cfg为zoo.cfg v ...
- MySql数据库恢复(*frm)文件
mysql数据库恢复(*frm)文件 WorkBench 在使用虚拟服务器时,服务器提供商一般不会像我们使用本地数据库一样:使用导入导出(这样的文件后缀是*.sql).大部分时候提供的是一个文件夹,里 ...
- EasyUI的功能树之扁平化
上篇博客主要介绍了异步加载树的方法,通过前台传给后台一个节点的id值,然后当单击节点加号时,查询并显示其子节点的数据.其实如果不是很大的数据,我们本可以次把树中所有节点都加载上来的.也就是说,我的Ac ...