C# 设计模式之工厂模式(一)

时间:2023-12-14 14:10:44

  写在前面,PS一句:笔记专用,轻拍勿喷,看的不爽绕路前行即可。

一.举栗说明

  1.剧情:某银行财务有三位员工,分别为A、B、C三人,主要任务就是去银行取钱,如下:

 class EmloyeeA:
{ public void DoSomeThing()
{
Console.WriteLine("EmloyeeA去取钱"); }
} class EmloyeeB
{ public void DoSomeThing()
{
Console.WriteLine("EmloyeeB去取钱"); }
} class EmloyeeC
{ public void DoSomeThing()
{
Console.WriteLine("EmloyeeC去取钱");
}
}

  某日主管说:“A去取钱”或者“B去取钱”的时候就有如下的动作了:

 class Manager
{
public Manager()
{
EmloyeeA emloyeeA = new EmloyeeA();
emloyeeA.DoSomeThing(); EmloyeeA emloyeeB = new EmloyeeA();
emloyeeB.DoSomeThing();
} }

  以上,所有动作已完成,但这样下来发现代码耦合度高(主管对每个员工都直接联系)、封装性差(每个员工信息都暴露在外面),还有用自己的话讲就是麻烦,不便于后期维护。

以下是改装成工厂模式:

  2.建立员工抽象类:IEmolyee,然后各员工继承自该类:

  public interface IEmployee
{ void DoSomeThing();
} public class EmloyeeA : IEmployee
{
public void DoSomeThing()
{
Console.WriteLine("EmloyeeA去取钱");
}
} class EmloyeeB : IEmployee
{ public void DoSomeThing()
{
Console.WriteLine("EmloyeeB去取钱");
}
} class EmloyeeC : IEmployee
{ public void DoSomeThing()
{
Console.WriteLine("EmloyeeC去取钱");
}
}
}

  3.建立工厂:

  

  public interface IFactory
{
IEmployee Creat(string id);
} public class Factory : IFactory
{
public IEmployee Creat(string id)
{
switch (id)
{
case "A":
return new EmloyeeA();
case "B":
return new EmloyeeB();
case "C":
return new EmloyeeC();
default:
return new EmloyeeA();
}
}
}

  4.主管调用员工:

IFactory factory = new Factory();
IEmployee employeeA = factory.Creat("A");
IEmployee employeeB = factory.Creat("B");
employeeA.DoSomeThing();
employeeB.DoSomeThing();
Console.ReadLine();

  以上即为工厂模式简单实例。

二.工厂模式特点

  1.通过IEmplyee隔离了主管与各员工的依赖关系,降低耦合度,在主管面前根本看不到EmplyeeX的信息。

  2.即使对各员工信息和整体进行增、删、改操作也不影响大局,确切的说主管不关心员工变化。

  3就代码操作而言,相对直接写个EmplyeeX出来,调用工厂方便得多。

三.示例代码

以上。