program.cs file

using System;
using System.Collections.Generic;
using System.Text; namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
#region 实现上逆
DVD dvd = new DVD();
Console.WriteLine(dvd.PlayVideo()); VCD vcd = new VCD();
Console.WriteLine(vcd.PlayVideo());
#endregion
#region 实现多态
Test();
#endregion }
static void Test()
{
VideoShow vs;
vs = new DVD();
Play(vs); vs = new VCD();
Play(vs);
}
static void Play(VideoShow vs)
{
string str = vs.PlayVideo();
Console.WriteLine(str);
}
}
public abstract class VideoShow
{
public abstract string PlayVideo();
}
public class VCD:VideoShow
{
public override string PlayVideo()
{
return "我放的是VCD";
}
}
public class DVD:VideoShow
{
public override string PlayVideo()
{
return "我放的是DVD";
}
}
}

create.cs file

using System;
using System.Collections.Generic;
using System.Text; namespace ConsoleApplication1
{
class Create
{
public static VideoShow factory(string VideoName)
{
switch (VideoName.ToUpper())
{
case "DVD":
return new DVD();
case "VCD":
return new VCD();
}
return null;
}
}
public class Test
{
public static void Main()
{
VideoShow vs = Create.factory("DVD");
vs.PlayVideo(); vs = Create.factory("VCD");
vs.PlayVideo();
}
}
}

codefile

using System;
using System.Text;
class Program
{
static void Main(string[] args)
{
DVD dvd = new DVD();
Console.WriteLine(dvd.PlayVideo());
VCD vcd = new VCD();
Console.WriteLine(vcd.PlayVideo()); TEST();
} static void TEST()
{
VideoShow vs;
vs = new DVD();
Play(vs); vs = new VCD();
Play(vs);
}
static void Play(VideoShow vs)
{
string str = vs.PlayVideo();
Console.WriteLine(str);
}
}
public abstract class VideoShow
{
public abstract string PlayVideo();
}
public class VCD : VideoShow
{
public override string PlayVideo()
{
return "我放的是VCD";
}
}
public class DVD:VideoShow
{
public override string PlayVideo()
{
return "我放的是DVD";
}
}

接口不可以实例化。但是接口对象可以指向它的实现类对象。

C#里面比较有特点的东西
class Example
{
private static Example instance;
private Example() {}
public static Example Instance//跟java的set和get方法差不多,但是形式那么怪,不是函数,没有参数,但是有函数体
{
 get
 {
 if(null==instance)
 {
 instance=new Example();

}
 return instance;
 }
}

}

C#写的工厂模式的更多相关文章

  1. Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)

    jquery提供的serialize方法能够实现. $("#searchForm").serialize();但是,观察输出的信息,发现serialize()方法做的是将表单中的数 ...

  2. 用 Flask 来写个轻博客 (18) — 使用工厂模式来生成应用对象

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 工厂模式 使用工厂方法 Factory Method 创建 app 对 ...

  3. 从接口、抽象类到工厂模式再到JVM来总结一些问题

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习! 涉及到的知识点总结如下: 为什么使用接口? 接口和抽象类的区别 简单工厂模式总结 Java中new和newInstance的区别 J ...

  4. 面向对象设计模式纵横谈:Abstract Factory 抽象工厂模式(笔记记录)

         今天是设计模式的第二讲,抽象工厂的设计模式,我们还是延续老办法,一步一步的.演变的来讲,先来看看一个对象创建的问题. 1.如何创建一个对象 常规的对象创建方法: 这样的创建对象没有任何问题, ...

  5. java工厂模式

    (1)概念大白话:java工厂模式就是客户端(main函数)要创建对象觉得麻烦就让另外一个叫工厂的类帮它创建,然后自己每次要创建对象就叫工厂帮它弄,举个例子,在没有工厂这个"手下" ...

  6. Objective-C 工厂模式(下) -- 抽象工厂模式

    相比简单工厂模式, 只有一个工厂 能生产的手机也是固定的 抽象工厂模式类似于有很多家工厂, 当用户要买什么手机就创建对应的工厂去生产 比如用户要买iPhone就创建一个Apple工厂来生产手机, 要买 ...

  7. Objective-C 工厂模式(上) -- 简单工厂模式

    简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂 ...

  8. Java设计模式之工厂模式(Factory)

    前言: 前面学习了建造者设计模式,接下来学习一下Retrofit中使用的另外一个设计模式,工厂设计模式!!!里面采用工厂模式使得数据转换得到完全解耦,工厂模式的好处用到了极致,如此好的设计模式我们怎能 ...

  9. php实现设计模式之 简单工厂模式

    作为对象的创建模式,用工厂方法代替new操作. 简单工厂模式是属于创建型模式,又叫做静态工厂方法模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 工厂 ...

随机推荐

  1. LoadRunner内部结构

    转载自:http://blog.sina.com.cn/s/blog_6da75b980100n2nv.html   英文版地址: http://www.rickyzhu.com/21_princip ...

  2. Java中将InputStream读取为String, 各种方法的性能对比

    如下, 一共存在11种实现方式及其对应的性能测试结果: 1. 使用IOUtils.toString (Apache Utils) String result = IOUtils.toString(in ...

  3. 用javascript写一个emoji表情插件

    概述 以我们写的这个emoji插件为例,网上已经有一些相关的插件了,但你总感觉有些部分的需求不能被满足(如:可以自行添加新的表情包而不用去改源代码等等) 详细 代码下载:http://www.demo ...

  4. java内存泄露问题

    内存泄露是指一个不再被程序使用的对象或变量还在内存中占用存储空间. 在Java语言中,判断一个内存空间是否符合垃圾回收的标准有两个: ①给对象赋予了空值null,以后再没有使用过: ②给对象赋予了新值 ...

  5. write()和prinln()的区别?

    输出数字不同: write()输出数字转换为字符,println原样输出. 输出null不同: write()输出引用类型的时候调用的toString转换为String数据,因此如果对象为null那么 ...

  6. 如何解决普通用户使用sudo找不到命令

    一.在linux的普通用户下,要使用root权限的命令需要使用sudo [dev@dev1 client_api]# sudo git pull origin develop sudo: git: c ...

  7. 可以尝试用Google Font API来摆脱网页字体的单调 仅仅抛砖引玉

    http://www.nowamagic.net/librarys/veda/detail/2513

  8. 阿里云ECS服务器Linux环境下配置php服务器(二)--phpMyAdmin篇

    上一篇讲了PHP服务器的基本配置,我们安装了apache,php,还有MySQL,最后还跑通了一个非常简单的php页面,有兴趣的朋友可以看我的这篇博客: 阿里云ECS服务器Linux环境下配置php服 ...

  9. Linux内核(17) - 高效学习Linux驱动开发

    这本<Linux内核修炼之道>已经开卖(网上的链接为: 卓越.当当.china-pub ),虽然是严肃文学,但为了保证流畅性,大部分文字我还都是斟词灼句,反复的念几遍才写上去的,尽量考虑到 ...

  10. Python tuple 函数

    描述 Python 元组 tuple() 函数将列表转换为元组. 语法 以下是 tuple 的语法: tuple( seq ) 参数 seq -- 要转换为元组的序列. 返回值 返回元组. 实例 以下 ...