掌握C#面向对象设计模式中的抽象工厂模式;
理解为什么要使用抽象工厂模式;
能够综合运用C#面向对象的抽象、继承、接口等方法实现抽象工厂。
抽象工厂设计模式原理结构:
class Client
{
static void Main(string[] args)
{
// 长沙工厂制作长沙的鸭脖和鸭架
AbstractFactory changshaFactory = new changshaFactory();
YaBo changshaYabo = changshaFactory.CreateYaBo();
changshaYabo.Print();
YaJia changshaYajia = changshaFactory.CreateYaJia();
changshaYajia.Print();
// 上海工厂制作上海的鸭脖和鸭架
AbstractFactory shangHaiFactory = new ShangHaiFactory();
shangHaiFactory.CreateYaBo().Print();
shangHaiFactory.CreateYaJia().Print();
Console.Read();
}
}
/// <summary>
/// 抽象工厂类,提供创建两个不同地方的鸭架和鸭脖的接口
/// </summary>
public abstract class AbstractFactory
{
// 抽象工厂提供创建一系列产品的接口,这里作为例子,只给出了周黑鸭中鸭脖和鸭架的创建接口
public abstract YaBo CreateYaBo();
public abstract YaJia CreateYaJia();
}
/// <summary>
/// 长沙周黑鸭工厂负责制作长沙的鸭脖和鸭架
/// </summary>
public class changshaFactory : AbstractFactory
{
// 制作长沙鸭脖
public override YaBo CreateYaBo()
{
return new changshaYaBo();
}
// 制作长沙鸭架
public override YaJia CreateYaJia()
{
return new changshaYaJia();
}
}
/// <summary>
/// 上海周黑鸭工厂负责制作上海的鸭脖和鸭架
/// </summary>
public class ShangHaiFactory : AbstractFactory
{
// 制作上海鸭脖
public override YaBo CreateYaBo()
{
return new ShangHaiYaBo();
}
// 制作上海鸭架
public override YaJia CreateYaJia()
{
return new ShangHaiYaJia();
}
}
/// <summary>
/// 鸭脖抽象类,供每个地方的鸭脖类继承
/// </summary>
public abstract class YaBo
{
/// <summary>
/// 打印方法,用于输出信息
/// </summary>
public abstract void Print();
}
/// <summary>
/// 鸭架抽象类,供每个地方的鸭架类继承
/// </summary>
public abstract class YaJia
{
/// <summary>
/// 打印方法,用于输出信息
/// </summary>
public abstract void Print();
}
/// <summary>
/// 长沙的鸭脖类,因为江西人喜欢吃辣的,所以长沙的鸭脖稍微会比上海做的辣
/// </summary>
public class changshaYaBo : YaBo
{
public override void Print()
{
Console.WriteLine("长沙的鸭脖");
}
}
/// <summary>
/// 上海的鸭脖没有长沙的鸭脖做的辣
/// </summary>
public class ShangHaiYaBo : YaBo
{
public override void Print()
{
Console.WriteLine("上海的鸭脖");
}
}
/// <summary>
/// 长沙的鸭架
/// </summary>
public class changshaYaJia : YaJia
{
public override void Print()
{
Console.WriteLine("长沙的鸭架子");
}
}
/// <summary>
/// 上海的鸭架
/// </summary>
public class ShangHaiYaJia : YaJia
{
public override void Print()
{
Console.WriteLine("上海的鸭架子");
}
}
public abstract class AbstractFactory
{
// 抽象工厂提供创建一系列产品的接口
public abstract YaSheTou CreateYaSheTou();
}
/// <summary>
/// 武汉周黑鸭工厂负责制作武汉的鸭舌头
/// </summary>
public class WuHanFactory : AbstractFactory
{
// 制作武汉鸭舌头
public override YaSheTou CreateYaSheTou()
{
return new WuHanYaSheTou();
}
}
public abstract class YaSheTou
{
/// <summary>
/// 打印方法,用于输出信息
/// </summary>
public abstract void Print();
}
public class WuHanYaSheTou : YaSheTou
{
public override void Print()
{
Console.WriteLine("武汉的鸭脖");
}
}
class Client
{
static void Main(string[] args)
{
// 武汉工厂制作武汉的鸭舌头
AbstractFactory WuHanFactory = new WuHanFactory();
YaSheTou WuHanYaSheTou = WuHanFactory.CreateYaSheTou();
WuHanYaSheTou.Print();
}
}
心得:不是很懂为什么展现出来没有框架