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