最近看简单工厂模式,视频中只是简单的讲了讲,于是自己又上网查了一下,有了一个初步的了解,它和多态性有着密切的关系,它是通过建立一个父类,通过派生出不同的子类来产生不同的功能,再根据主程序中所指定的实例化的派生子类来实现的。
工厂,我想大家都知道现实中的工厂是干什么的,就生产产品的,至于规格,他们不知道,于是需要一个抽象角色来告诉他生产什么,比如螺母,于是父类产生了,就是螺母,但是规格呢?这时候就需要具体角色来规定规格,也就是由抽象类父类派生出具体的子类来具体分类出不同的规格,下面用一段简单的代码描述一下:
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都符合这种规范,接口的使用符合开闭原则,尽量减少了代码与环境的直接接触而换为接口,想要实现什么结果,只需要在主程序和子类中进行扩充就可以了。
时间: 2024-10-29 18:09:33