工厂模式
废话不多说先上代码!
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即可,这样不会影响到其他任何类型的结构。
如果本片文章可以帮助到大家 还请大家点个赞 来鼓励鼓励俺呀!