最近看簡單工廠模式,視頻中只是簡單的講了講,於是自己又上網查了一下,有了一個初步的了解,它和多態性有著密切的關系,它是通過建立一個父類,通過派生出不同的子類來產生不同的功能,再根據主程序中所指定的實例化的派生子類來實現的。
工廠,我想大家都知道現實中的工廠是干什麼的,就生產產品的,至於規格,他們不知道,於是需要一個抽象角色來告訴他生產什麼,比如螺母,於是父類產生了,就是螺母,但是規格呢?這時候就需要具體角色來規定規格,也就是由抽象類父類派生出具體的子類來具體分類出不同的規格,下面用一段簡單的代碼描述一下:
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都符合這種規范,接口的使用符合開閉原則,盡量減少了代碼與環境的直接接觸而換為接口,想要實現什麼結果,只需要在主程序和子類中進行擴充就可以了。