0.C#设计模式-简单工厂模式

设计模式:

工厂方法模式(Factory Method Pattern)

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

工厂方法模式类图:

工厂方法模式C#代码举例:

MobilePhone类手机类

  1. public abstract class MobilePhone
  2. {
  3. public abstract void print();
  4. }

Iphone 类 苹果手机类

  1. public class Iphone : MobilePhone
  2. {
  3. public override void print()
  4. {
  5. Console.WriteLine("我是苹果手机!");
  6. }
  7. }

XiaoMI 类 小米手机类

  1. public class XiaoMI:MobilePhone
  2. {
  3. public override void print()
  4. {
  5. Console.WriteLine("我是小米手机");
  6. }
  7. }

SmarTisan类 锤子手机类

  1. public class SmarTisan : MobilePhone
  2. {
  3. public override void print()
  4. {
  5. Console.WriteLine("我是锤子手机!");
  6. }
  7. }

MobilePhoneFactory 类 手机工厂类

  1. public abstract class MobilePhoneFactory
  2. {
  3. public abstract MobilePhone Create();
  4. }

IphoneFactory 类 苹果手机工厂类

  1. public class IphoneFactory:MobilePhoneFactory
  2. {
  3. public override MobilePhone Create()
  4. {
  5. return new Iphone();
  6. }
  7. }

XiaoMiFactory类 小米手机工厂类

  1. public class XiaoMiFactory:MobilePhoneFactory
  2. {
  3. public override MobilePhone Create()
  4. {
  5. return new XiaoMI();
  6. }
  7. }

SmarTisanFactory类 锤子手机工厂类

  1. public class SmarTisanFactory:MobilePhoneFactory
  2. {
  3. public override MobilePhone Create()
  4. {
  5. return new SmarTisan();
  6. }
  7. }

测试

(即使每次增加新的品牌,只需要增加新品牌的类,以及对应工厂即可使用,方便扩展)

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. //创建苹果手机工厂
  6. MobilePhoneFactory mobilePhoneFactoryIphone = new IphoneFactory();
  7. //苹果手机工厂创建手机
  8. MobilePhone mobilePhoneIphone = mobilePhoneFactoryIphone.Create();
  9. //由苹果工厂创建苹果手机
  10. mobilePhoneIphone.print();
  11.  
  12. //小米工厂生产小米手机
  13. MobilePhoneFactory mobilePhoneFactoryXiaoMi = new XiaoMiFactory();
  14. MobilePhone mobilePhoneXiaoMi = mobilePhoneFactoryXiaoMi.Create();
  15. mobilePhoneXiaoMi.print();
  16.  
  17. //锤子手机工厂生产锤子手机
  18. MobilePhoneFactory mobilePhoneFactorySmarTisan = new SmarTisanFactory();
  19. MobilePhone mobilePhoneSmarTisan = mobilePhoneFactorySmarTisan.Create();
  20. mobilePhoneSmarTisan.print();
  21.  
  22. Console.Read();
  23.  
  24. }
  25. }

运行结果:

源码工程文件

C#设计模式--工厂方法模式的更多相关文章

  1. 4. 星际争霸之php设计模式--工厂方法模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  2. C++设计模式——工厂方法模式

    本文版权归果冻说所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.» 本文链接:http://www.jellythink.com/arch ...

  3. JAVA设计模式--工厂方法模式

    工厂方法设计模式 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关.是具体工厂角色必须实现的接口或者必须继承的父类.在java中它由抽象类或者接口来实现.具体工厂角色:它含有和具体业务逻辑有关 ...

  4. 深入浅出设计模式——工厂方法模式(Factory Method)

    介绍在简单工厂模式中,我们提到,工厂方法模式是简单工厂模式的一个延伸,它属于Gof23中设计模式的创建型设计模式.它解决的仍然是软件设计中与创建对象有关的问题.它可以更好的处理客户的需求变化. 引入我 ...

  5. 设计模式--工厂方法模式(Factory method pattern)及应用

    面向对象的好处: 通过封装,继承,多态把程序的耦合度降低. 用设计模式可以使程序更加灵活,容易修改,且易于复用. 1. 工厂方法模式 Define an interface for creating ...

  6. 我的Java设计模式-工厂方法模式

    女朋友dodo闹脾气,气势汹汹的说"我要吃雪糕".笔者心里啊乐滋滋的,一支雪糕就能哄回来,不亦乐乎?! 但是,雪糕买回来了,她竟然说"不想吃雪糕了,突然想吃披萨" ...

  7. 设计模式 — 工厂方法模式(Factory Method)

    在开发系统中,经常会碰到一个问题.现在需要实现的一些功能,但是这个功能模块以后一定是需要扩展的,那么现在开发中就不仅要实现现在的功能,还要考虑以后的扩展.那么为了系统的健壮,扩展就要遵循开闭原则(简单 ...

  8. Java设计模式—工厂方法模式&抽象工厂模式

    工厂方法模式与抽象工厂模式都是设计模式中重要而且常见的模式.       工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 通用类图如下: 在 ...

  9. 设计模式——工厂方法模式(Factory Method)

    原文地址:http://www.cnblogs.com/Bobby0322/p/4179921.html 介绍 在简单工厂模式中,我们提到,工厂方法模式是简单工厂模式的一个延伸,它属于Gof23中设计 ...

随机推荐

  1. C# 线程池执行操作例子

    public partial class Form1 : Form { CountdownEvent hander = ); public static object lock_action = ne ...

  2. Dependency Scopes(maven)

    Dependency scope 是用来限制Dependency的作用范围的, 影响maven项目在各个生命周期时导入的package的状态. 自从2.0.9后,新增了1种,现在有了6种scope: ...

  3. Blender下各种坐标系

    转载:https://jingyan.baidu.com/article/ed2a5d1f8f018309f7be1779.html 打开blender创建一个立方体.   切换到“自身”坐标系,旋转 ...

  4. 前端图片压缩上传(纯js的质量压缩,非长宽压缩)

    此demo为大于1M对图片进行压缩上传 若小于1M则原图上传,可以根据自己实际需求更改. demo源码如下: <!DOCTYPE html> <html> <head&g ...

  5. 关于Struts2的文件下载

    首先先来说下关于文件下载的原理: 服务端为客户端提供了一个下载服务,所以服务端需要一个输出流(把客户请求下载的文件输出),相对于服务端来说,客户端需要下载接收一个文件,所以它需要一个输入流(接收文件) ...

  6. SharePoint 2013 Deploy Master Page And Page Layout

    2013年9月27日的一篇随笔,其实也是自己编写的部署文档,由于客户是HK的,所以描述部分是用英文. 涉及到的内容是关于SharePoint 2013如何部署自定义的母版页和布局页. First, L ...

  7. JUC回顾之-ArrayBlockingQueue底层实现和原理

    ArrayBlockingQueue的原理和底层实现的数据结构 : ArrayBlockingQueue是数组实现的线程安全的有界的阻塞队列,可以按照 FIFO(先进先出)原则对元素进行排序. 线程安 ...

  8. MongoDB之update

    Update操作只作用于集合中存在的文档.MongoDB提供了如下方法来更新集合中的文档: db.collection.update() db.collection.updateOne() New i ...

  9. level 1 -- unit 4 -- where 引导的疑问句

    where be sb/sth 询问地点,用where where is the restaurant? where are my socks ? where was tome just now? w ...

  10. PHP 使用redis

    <?php /*从平台获取数据库名*/ $dbname = ""; /*从环境变量里取host,port,user,pwd*/ $host = ''; $port = ''; ...