概念
(1)提供一系列得相互依赖对象得创建工作
(2)封装对象得常规访问方法得方式
(3)提供统一调用数据访问方法得方式
(4)避免调用数据访问和具体得对象创建工作耦合
理解:工厂有很多种,每当一个人只说出工厂的时候,它是一个抽象的,而说出它是一个生产汽车的工厂时,它是一具体的工厂,例如你又说出跑马车,没有说出具体的系列,跑马车这时只是一个抽象类而已,如果你说的是K78的跑马车的话,那就是一个具体的类和对象了。
工厂方法代码案例:
(1)操作类
/// <summary>
/// 抽象操作类
/// </summary>
public abstract class Operation
{
public string studentA;
public string studentB;
public abstract string GetResult();
}
(2)学习
/// <summary>
/// 学习
/// </summary>
public class study : Operation
{
public override string GetResult()
{
return "";
}
}
(3)玩
/// <summary>
/// 玩
/// </summary>
public class play : Operation
{
public override string GetResult()
{
return "";
}
}
(4)客户端代码
Operation operation1 = SimpleFactory.CreateOperation("study");
operation1.studentA = "张三同学正在打代码............";
operation1.studentB = "李四同学正在学习...............";
Operation operation2 = SimpleFactory.CreateOperation("play");
Console.WriteLine("{0}",operation1.studentA,operation1.GetResult());
Console.WriteLine("{0}",operation1.studentB,operation1.GetResult());
Console.WriteLine("------------------------------------------");
operation2.studentA = "张三同学正在玩游戏............";
operation2.studentB = "李四同学正在跑步...............";
Console.WriteLine("{0}", operation2.studentA, operation2.GetResult());
Console.WriteLine("{0}", operation2.studentB, operation2.GetResult());
Console.ReadKey();
(5)整体代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace test
{
class Program
{
/// <summary>
/// 抽象操作类
/// </summary>
public abstract class Operation
{
public string studentA;
public string studentB;
public abstract string GetResult();
}
/// <summary>
/// 学习
/// </summary>
public class study : Operation
{
public override string GetResult()
{
return "";
}
}
/// <summary>
/// 玩
/// </summary>
public class play : Operation
{
public override string GetResult()
{
return "";
}
}
/// <summary>
/// 简单工厂类
/// </summary>
/// <param name="args"></param>
public class SimpleFactory
{
public static Operation CreateOperation(string operation)
{
Operation student = null;
switch (operation)
{
case "study":
student = new study();
break;
case "play":
student = new play();
break;
}
return student;
}
}
/// <summary>
/// 客户端代码
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
Operation operation1 = SimpleFactory.CreateOperation("study");
operation1.studentA = "张三同学正在打代码............";
operation1.studentB = "李四同学正在学习...............";
Operation operation2 = SimpleFactory.CreateOperation("play");
Console.WriteLine("{0}",operation1.studentA,operation1.GetResult());
Console.WriteLine("{0}",operation1.studentB,operation1.GetResult());
Console.WriteLine("------------------------------------------");
operation2.studentA = "张三同学正在玩游戏............";
operation2.studentB = "李四同学正在跑步...............";
Console.WriteLine("{0}", operation2.studentA, operation2.GetResult());
Console.WriteLine("{0}", operation2.studentB, operation2.GetResult());
Console.ReadKey();
}
}
}
(6)运行效果
这次由于时间的匆忙,没有来得及补充完整,解析也不是很清晰,不过还是希望通过这一个简单的案例,能够帮助到有困惑的编程爱好者。