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. 揭开JDBC的神秘面纱,让JDBC数据库的连接参数不再神秘

    1.JDBC是什么? JDBC(Java DataBase Connectivity)java数据库连接 2.JDBC可以做什么?        简单地说,JDBC 可做三件事:与数据库建立连接.发送 ...

  2. Mysql的批量导入类 MySqlBulkLoader

    在mssqlserver 中 对应的SqlBuckCopy类,进行批量数据插入. 在mysql 中,官方提供了MySqlBulkLoader 平行的工具: 不过里面有坑,具体坑是插入空值列 NULL的 ...

  3. Spring框架文档与API(4.3.6版本)

    http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/ Table of Contents I ...

  4. sleep()和usleep()的使用和区别

    在iOS中  如果 在主线程中用这2个 都会 对 主线程 造成 阻塞 具体区别 如下   Linux 中的 代码 为例 函数名: sleep头文件: #include <windows.h> ...

  5. Jmeter——BeanShell PreProcessor的用法

    一.什么是BeanShell BeanShell是一个小型嵌入式Java源代码解释器,具有对象脚本语言特性,能够动态地执行标准JAVA语法,并利用在JavaScript和Perl中常见的的松散类型.命 ...

  6. JMeter学习笔记--详解JMeter逻辑控制器

    JMeter使用逻辑控制器来决定采样器的处理顺序 简单控制器(Simple Controller):存储设备(将某些采样器归组) 循环控制器(Loop Controller:设置循环次数 仅一次控制器 ...

  7. C#Copy

    1.浅拷贝(值类型): public class LightCopy { public int Val { get; set; } public LightCopy(int ival) { Val = ...

  8. Linux内核配置解析 - Boot options

    1. 前言 本文将介绍ARM64架构下,Linux kernel和启动有关的配置项. 注1:本系列文章使用的Linux kernel版本是“X Project”所用的“Linux 4.6-rc5”,具 ...

  9. Python atan2() 函数

    描述 atan2() 返回给定的 X 及 Y 坐标值的反正切值. 语法 以下是 atan2() 方法的语法: import math math.atan2(y, x) 注意:atan2()是不能直接访 ...

  10. JavaScript - 返回头部

    制作浮动top $(window).scroll( function() { var scrollValue=$(window).scrollTop(); scrollValue > 600 ? ...