欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

学习C#设计模式(一)简单工厂模式

程序员文章站 2024-01-21 20:34:22
...

简单工厂模式

今天开始学习C# 设计模式 将每天的学习成果分享到博客 希望可以帮助到大家!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 简单工厂模式
{
    //抽象水果类
    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 Orchard {
        public Fruit Create(string name) {
            switch (name) {
                case "Apple":
                    return new Apple();//创建苹果类
                case "Orange":
                    return new Orange();//创建橘子类
                default:
                    throw new Exception("水果名称错误!");
            }
        }
    }
    class MainClass
    {
        static void Main(string[] args)
        {
            //创建果园
            Orchard factory = new Orchard();
            //创建苹果实例
            Fruit Apple = factory.Create("Apple");
            //种植苹果
            apple.Plant();
            //创建橘子实例
            Fruit Orange = factory.Create("Orange");
            //种植橘子
            apple.Plant();
        }
    }
}

实例代码首先定义了一个名为 Fruit 的抽象水果类,再由此类派生出苹果类 Apple 和橘子类Orange,然后定义一个名为Orchard的果园类,该类相当于简单的工厂类。Orchard类有一个创建水果的CreateFruit方法,传入需要种植的水果名称,返回一个Fruit类引用。从该方法可以看出实例代码利用简单工厂模式实现了一个从字符串到类型的映射。在Program类中对Apple和Orange的调用转移到了对Fruit的调用和对Orchard类的关联。这样很好地实现了Program与Apple类和Orange类的隔离。简单的工厂模式适用于客户程序与具体的创建类型之间的隔离。

再来分析一下简单工厂模式的弊端,简单工厂模式中多了一个Orchard类,Orchard类在构造一个Apple或是Orange后就不再使用了,这样对资源有些浪费。这里可以考虑使用将Orchard定义成静态类,通过静态方法CreateFruit来构造Fruit的子类实例,或者使用单例模式也行。

相关标签: C#