📅  最后修改于: 2023-12-03 14:51:29.495000             🧑  作者: Mango
在C#中,有时候我们需要在某个位置统一实例化一个对象,可以通过工厂模式或单例模式来实现。
工厂模式是一种创建型设计模式,它的目的是通过提供一个工厂方法来创建对象。工厂方法允许子类决定要创建的对象类型。
工厂模式的示例代码如下所示:
public interface IAnimal
{
void Speak();
}
public class Dog : IAnimal
{
public void Speak()
{
Console.WriteLine("Dog says: Bow-wow!");
}
}
public class Cat : IAnimal
{
public void Speak()
{
Console.WriteLine("Cat says: Meow!");
}
}
public static class AnimalFactory
{
public static IAnimal CreateAnimal(string animalType)
{
switch (animalType.ToLower())
{
case "dog":
return new Dog();
case "cat":
return new Cat();
default:
throw new Exception($"Invalid animal type: {animalType}");
}
}
}
public class Program
{
static void Main(string[] args)
{
var dog = AnimalFactory.CreateAnimal("dog");
dog.Speak();
var cat = AnimalFactory.CreateAnimal("cat");
cat.Speak();
}
}
上面的代码定义了IAnimal
接口和两个实现它的类Dog
和Cat
,并且定义了一个AnimalFactory
工厂。
工厂类中的CreateAnimal
方法根据传入的动物类型参数创建相应的实例并返回。在Program
类中调用了工厂方法来创建Dog
和Cat
对象。
单例模式是一种创建型设计模式,它的目的是确保特定类的实例只有一个,并且提供全局访问点。
单例模式的示例代码如下所示:
public sealed class Singleton
{
private static readonly Singleton instance = new Singleton();
private Singleton() { }
public static Singleton Instance => instance;
public void DoSomething()
{
Console.WriteLine("Singleton is doing something...");
}
}
public class Program
{
static void Main(string[] args)
{
var singleton1 = Singleton.Instance;
singleton1.DoSomething();
var singleton2 = Singleton.Instance;
singleton2.DoSomething();
Console.WriteLine(singleton1 == singleton2); // 输出true
}
}
上面的代码定义了一个单例类Singleton
,它包含一个私有的构造函数和一个静态只读字段instance
,它是类的唯一实例。
Singleton
类中还定义了一个静态只读属性Instance
,该属性返回实例instance
。最后,在Program
类中通过Singleton.Instance
来访问Singleton
的唯一实例,这个示例可用于在整个程序中实现单例实例。
以上就是在C#中实现在某个位置统一实例化一个对象的两种方法:工厂模式和单例模式。您可以根据需要选择其中之一。