AI智能
改变未来

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


简单工厂模式

今天开始学习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的子类实例,或者使用单例模式也行。

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