C#之简单工厂模式与多态性

简介:

         最近看简单工厂模式,视频中只是简单的讲了讲,于是自己又上网查了一下,有了一个初步的了解,它和多态性有着密切的关系,它是通过建立一个父类,通过派生出不同的子类来产生不同的功能,再根据主程序中所指定的实例化的派生子类来实现的。

         工厂,我想大家都知道现实中的工厂是干什么的,就生产产品的,至于规格,他们不知道,于是需要一个抽象角色来告诉他生产什么,比如螺母,于是父类产生了,就是螺母,但是规格呢?这时候就需要具体角色来规定规格,也就是由抽象类父类派生出具体的子类来具体分类出不同的规格,下面用一段简单的代码描述一下:

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();
    }
   //VideoShow工厂
    static void TEST()
    {//因为VideoShow是VCD和DVD的父类,所以vs能容纳下VCD和DVD
        VideoShow vs;//vs表示抽象基类
        vs = new DVD();
        Play(vs);
 
        vs = new VCD();
        Play(vs);
    }
   //运用到了多态,相当于一个接口
    static void Play(VideoShow vs)
    {
        string str = vs.PlayVideo();
        Console.WriteLine(str);
    }
}
//抽象角色:VideoShow
Public abstract class VideoShow
{
    public abstract  string PlayVideo();
}
//两种具体实现
//具体角色: VCD
public class VCD :VideoShow
{
    public override string PlayVideo()
    {
        return "我放的是VCD";
    }
}
//具体角色:DVD
public class DVD :VideoShow
{
    public override string PlayVideo()
    {
        return "我放的是DVD";
    }
}

下面是运行结果:

 

         这段代码就描述了一个简单工厂模式,从小往大说,首先要生产的是DVD\VCD,这两种具体产品同属于抽象类Videoshow,而如果直接把Videoshow带入主程序的话,想要更改则需要改子类,该主函数,为了灵活和可扩充,于是需要有一个接口,那么何为接口呢?也就是代码中的vs,它是一种规范,而VCD、DVD都符合这种规范,接口的使用符合开闭原则,尽量减少了代码与环境的直接接触而换为接口,想要实现什么结果,只需要在主程序和子类中进行扩充就可以了。

 

相关文章
|
3月前
|
数据采集 API 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPISDK设置软件触发模式(C#)
Baumer工业相机堡盟工业相机如何通过NEOAPISDK设置软件触发模式(C#)
40 1
|
4月前
|
设计模式 关系型数据库 程序员
UML中常用设计模式OCP、单例模式、简单工厂模式等模式讲解及C#中代码实现(附源码)
UML中常用设计模式OCP、单例模式、简单工厂模式等模式讲解及C#中代码实现(附源码)
43 0
|
8月前
|
传感器 监控 算法
Baumer工业相机堡盟工业相机如何通过BGAPISDK设置硬件触发模式(C#)
Baumer工业相机堡盟工业相机如何通过BGAPISDK设置硬件触发模式(C#)
82 0
|
8月前
|
编解码 缓存 算法
Baumer工业相机堡盟工业相机如何通过BGAPISDK设置多帧采集模式(C#)
Baumer工业相机堡盟工业相机如何通过BGAPISDK设置多帧采集模式(C#)
66 0
|
8月前
|
算法 机器人 C#
Baumer工业相机堡盟工业相机使用BGAPISDK将工业相机设为Burst模式以及该模式的优势以及行业应用(C#)
Baumer工业相机堡盟工业相机使用BGAPISDK将工业相机设为Burst模式以及该模式的优势以及行业应用(C#)
48 0
|
设计模式 C#
【设计模式】C#实现简单工厂模式
工厂模式总结三个要点: 1、不想直接new这个类的对象,防止这个类改变的时候在new的地方到处去改,麻烦且容易遗漏; 2、这个类的对象构建过程非常复杂,不想在代码的各个地方将这么复杂的构建过程反复书写; 3、这个类的对象在构建过程中依赖了很多其他的类,而你无法在调用的地方提供。
|
算法 C#
商场促销-策略模式(和简单工厂模式很像的哇) C#
还是那几句话: 学无止境,精益求精 十年河东,十年河西,莫欺少年穷 学历代表你的过去,能力代表你的现在,学习代表你的将来 废话不多说,直接进入正题: 首先按照大话设计模式的解释,在这里也总结下策略模式的概念:它定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算...
1578 0
|
.NET C#
代码无错就是优?简单工厂模式 C#
还是那几句话: 学无止境,精益求精 十年河东,十年河西,莫欺少年穷 学历代表你的过去,能力代表你的现在,学习代表你的将来 废话不多说,直接进入正题: 现在给你一道面试题,如下: 请用C++,C#,Java或VB.NET等任意一种面向对象语言实现一个计算机控制台程序,要求输入任意两个数字和一个运算符号,得到结果。
1199 0
|
关系型数据库 Go C#
C#设计模式之二工厂方法模式(Factory Method Pattern)【创建型】
原文:C#设计模式之二工厂方法模式(Factory Method Pattern)【创建型】 一、引言       在上一篇文章中我们讲解了过渡的一种模式叫做【简单工厂】,也有叫【静态工厂】的,通过对简单工厂模式得了解,我们也发现了它的缺点,就是随着需求的变化我们要不停地修改工厂里面的方法的代码,需求变化越多,里面的If--Else--也越多,这样就会造成简单工厂的实现逻辑过于复杂。
1542 0
|
C#
C#设计模式(19)——状态者模式(State Pattern)
原文:C#设计模式(19)——状态者模式(State Pattern) 一、引言   在上一篇文章介绍到可以使用状态者模式和观察者模式来解决中介者模式存在的问题,在本文中将首先通过一个银行账户的例子来解释状态者模式,通过这个例子使大家可以对状态者模式有一个清楚的认识,接着,再使用状态者模式来解决上一篇文章中提出的问题。
1058 0