閱讀770 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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都符合這種規範,接口的使用符合開閉原則,盡量減少了代碼與環境的直接接觸而換為接口,想要實現什麼結果,隻需要在主程序和子類中進行擴充就可以了。

 

最後更新:2017-04-03 12:54:50

  上一篇:go HDU1173 采礦
  下一篇:go xmpp即時通訊三