在要求输入邮箱的文本域,请填写真实的邮件地址。非真实邮件地址,将收不到回复信息。

C#实现简单工厂模式

C# 清风 835℃ 0评论

在面向对象程序中,我们经常看到一种模式就是简单工厂模式(Simple Factory Pattern)。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式根据提供给它的数据,返回几个可能类中的一个类的实例。通常它返回的类都有一个共同的父类和共同的方法,但每个方法执行的任务不同,而且根据不同的数据进行了优化。简单工厂模式实际上不属于23个GoF模式,但它可以作为学习工厂方法做铺垫。

一、UML类图,简单工厂基本类图

C#实现简单工厂模式-第0张图片

二、代码演示


/// <summary>
/// 产品抽象类
/// </summary>
public abstract class Product 
{
	public abstract void CreateProduct();
}
/// <summary>
/// 具体产品A
/// </summary>
public class ConcreteProductA:Product 
{
	public override void CreateProduct() 
	{
		//throw new NotImplementedException();
		Console.WriteLine("我是产品A");
	}
}
/// <summary>
/// 具体产品B
/// </summary>
public class ConcreteProductB:Product 
{
	public override void CreateProduct() 
	{
		//throw new NotImplementedException();
		Console.WriteLine("我是产品B");
	}
}
/// <summary>
/// 简单工厂
/// </summary>
public class SimpleProductFactory 
{
	public static Product CreateConcreteProduct(string productKey) 
	{
		Product product=null;
		switch (productKey) 
		{
			case "B":
			                product = new ConcreteProductB();
			break;
			case "A":
			                product = new ConcreteProductA();
			break;
		}
		return product;
	}
}
/// <summary>
/// 调用
/// </summary>
class Program 
{
	static void Main(string[] args) 
	{
		Product product = SimpleProductFactory.CreateConcreteProduct("B");
		product.CreateProduct();
		product = SimpleProductFactory.CreateConcreteProduct("A");
		product.CreateProduct();
		Console.Read();
	}
}

三、简单工厂的优缺点

  • 优点:简单工厂模式能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。外界与具体类隔离开来,偶合性低。如同上面的例子,客户端根本就不知道具体是由谁来实现,也不知道具体是如何实现的,客户端只是通过工厂获取它需要的接口对象。
  • 缺点:工厂类集中了所有实例的创建逻辑,没当有新产品添加时候必须要修改工厂。违反面向对象设计原则中的“开放封闭原则”。

四、应用场景
工厂类负责创建的对象比较少 ,客户只知道传入了工厂类的参数,对于始何创建对象(逻辑)不关心。

 

 



转载请注明:清风亦平凡 » C#实现简单工厂模式

喜欢 (0)or分享 (0)
支付宝扫码打赏 支付宝扫码打赏 微信打赏 微信打赏
头像
发表我的评论
取消评论

CAPTCHA Image
Reload Image
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址