0.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#设计模式--工厂方法模式的更多相关文章

  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. js作为参数,并且返回值;js的回调模式 callback

    有这样一个情景,当我们弹出一个 prompt的时候,要求用户在文本框输入一个文字,然后点击确认,就可以拿到返回值 var temp=prompt("请输入您的名字");     a ...

  2. VS2015 applicationhost.config 本地域名访问

    .vs\config\applicationhost.config <?xml version="1.0" encoding="UTF-8"?> & ...

  3. C# 抓取并导出网页里面所有超链接方法

    public class app { // 获取指定网页的HTML代码 public static string GetPageSource(string URL) { Uri uri = new U ...

  4. python的sciter库Pysciter安装教程(win32 + win64)

    Pysciter是一个结合HTML与Python编写桌面软件个三方库 注:无论是32位还是64位电脑,建议安装32位的sciter,这样写出来的软件可以在win32和win64电脑上都可以运行(前提p ...

  5. TradeStation简介

        TradeStation是美国一款经典程序化交易软件,支持股票.期货.外汇.期权等交易品种.它是由美国TradeStation公司开发,主要服务于美股.     TradeStation的设计 ...

  6. DEFINE_PER_CPU,如何实现“数组”

    引述自:http://www.unixresources.net/linux/clf/linuxK/archive/00/00/47/91/479165.html Kevin.Liu 的<调度器 ...

  7. react-router实现tab页面切换,并解决选中样式首页始终选中问题

    import React, {Component} from 'react'; import { BrowserRouter as Router, Route, NavLink } from &quo ...

  8. Android:AS与Unity3D之间打包的各种坑及解决方案

    作者:DrkCore (http://blog.csdn.net/DrkCore) 原文链接:(http://blog.csdn.net/drkcore/article/details/5207937 ...

  9. Unity UGUI 的RectTransform参数的设置

    1.改变RectTransform的top GetComponent<RectTransform>().offsetMax = new Vector2(GetComponent<Re ...

  10. web front end stack web 前段技术概览

    https://github.com/unruledboy/WebFrontEndStack