AI智能
改变未来

学习C#设计模式(二)工厂模式


工厂模式

废话不多说先上代码!

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace FactoryMethod{//抽象水果类public abstract class Fruit{//抽象种植水果类public abstract void Plant();}//具体苹果类public class Apple : Fruit{//种植苹果方法public override void Plant(){Console.WriteLine(\"种植又红又粉的苹果\");}}//具体橘子类public class Orange : Fruit{//种植橘子方法public override void Plant(){Console.WriteLine(\"种植又大又圆橘子\");}}//具体香蕉类public class Banana : Fruit{//种植香蕉方法public override void Plant(){Console.WriteLine(\"种植又软又甜的香蕉\");}}//定义果园类public abstract class Orchard{public abstract Fruit CreateFruit();//抽象创建水果方法}//苹果园类public class AppleOrchard : Orchard{public override Fruit CreateFruit(){return new Apple();//创建苹果实例}}//橘子园类public class OrangeOrchard : Orchard{public override Fruit CreateFruit(){return new Orange();//创建橘子实例}}//香蕉园类public class BananaOrchard : Orchard{public override Fruit CreateFruit(){return new Banana();//创建香蕉实例}}class Program{static void Main(string[] args){Orchard appleOrchard = new AppleOrchard();//创建苹果园实例Fruit Apple = appleOrchard.CreateFruit();//苹果园创建苹果实例Apple.Plant();//种植苹果Orchard orangeOrchard = new OrangeOrchard();//创建橘子园实例Fruit orange = orangeOrchard.CreateFruit();//橘子园创建橘子实例orange.Plant();//种植橘子Orchard bananaOrchard = new BananaOrchard();//创建香蕉园实例Fruit banana = orangeOrchard.CreateFruit();//香蕉园创建香蕉实例banana.Plant();//种植香蕉Console.ReadKey();}}

代码解析
上面的例代码主要实现了工厂方法模式,首先创建了抽象果园类 Orchard,该类相当于抽象工厂类,它提供了创建水果类实例的接口CreateFruit,返回的是抽象水果类Fruit的引用。三个具体的果园类AppleOrchard类、OrangeOrchard类和BananaOrchard类都派生自Orchard类,通过这三个派生类完成对Fruit三个派生类Apple类、Orange类和Banana类的创建。
在main函数中创建的Fruit类型完全依赖于抽象的Orchard类,无须依赖某一具体的工厂类实例。

注意:
这就是依赖倒置原则,即依赖于抽象类,而不依赖于具体类。
从实例中可以看出,如果现在果园中要种植葡萄这一新种类水果,只需要定义一个Orchard的派生类葡萄园类 GrapeOrchard 和一个派生自 Fruit 类的具体的葡萄类 Grape,然后由GrapeOrchard类创建Grape即可,这样不会影响到其他任何类型的结构。

如果本片文章可以帮助到大家 还请大家点个赞 来鼓励鼓励俺呀!

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 学习C#设计模式(二)工厂模式