学习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即可,这样不会影响到其他任何类型的结构。

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值