📜  在某个位置统一实例化一个对象 - C# (1)

📅  最后修改于: 2023-12-03 14:51:29.495000             🧑  作者: Mango

在某个位置统一实例化一个对象 - C#

在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接口和两个实现它的类DogCat,并且定义了一个AnimalFactory工厂。

工厂类中的CreateAnimal方法根据传入的动物类型参数创建相应的实例并返回。在Program类中调用了工厂方法来创建DogCat对象。

单例模式

单例模式是一种创建型设计模式,它的目的是确保特定类的实例只有一个,并且提供全局访问点。

单例模式的示例代码如下所示:

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#中实现在某个位置统一实例化一个对象的两种方法:工厂模式和单例模式。您可以根据需要选择其中之一。