简易的工厂设计模式

简介: 简易的工厂设计模式

工厂设计模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,而无需暴露对象的创建逻辑。在工厂模式中,我们定义一个接口或抽象类,该接口或抽象类用于创建对象,但让子类决定要实例化的类。工厂方法模式使类的实例化延迟到其子类。

下面是一个完整的C#实现案例:

首先,我们定义一个接口,用于创建对象:

public interface IAnimal
{
   
    void Speak();
}

然后,我们定义两个实现该接口的类:

public class Dog : IAnimal
{
   
    public void Speak()
    {
   
        Console.WriteLine("狗说:汪,汪");
    }
}

public class Cat : IAnimal
{
   
    public void Speak()
    {
   
        Console.WriteLine("猫说:喵。");
    }
}

接下来,我们定义一个工厂类,该类根据传入的参数创建相应的对象:

public class AnimalFactory
{
   
    public IAnimal GetAnimal(string animalType)
    {
   
        switch (animalType.ToLower())
        {
   
            case "dog":
                return new Dog();
            case "cat":
                return new Cat();
            default:
                throw new ArgumentException("无效动物型");
        }
    }
}

最后,我们可以使用工厂类来创建对象:

AnimalFactory animalFactory = new AnimalFactory();

IAnimal dog = animalFactory.GetAnimal("dog");
dog.Speak(); // 输出:狗说:汪汪

IAnimal cat = animalFactory.GetAnimal("cat");
cat.Speak(); // 输出:猫说:喵

在这个例子中,我们使用工厂类来创建不同类型的动物对象,而不需要暴露对象的创建逻辑。这使得我们可以轻松地添加新的动物类型,而不需要修改现有的代码。

以下是一个抽象工厂的C#示例:

// 抽象产品接口
public interface IProduct
{
   
    void Use();
}

// 具体产品A
public class ProductA : IProduct
{
   
    public void Use()
    {
   
        Console.WriteLine("使用产品A");
    }
}

// 具体产品B
public class ProductB : IProduct
{
   
    public void Use()
    {
   
        Console.WriteLine("使用产品B");
    }
}

// 抽象工厂接口
public interface IFactory
{
   
    IProduct CreateProduct();
}

// 具体工厂A
public class FactoryA : IFactory
{
   
    public IProduct CreateProduct()
    {
   
        return new ProductA();
    }
}

// 具体工厂B
public class FactoryB : IFactory
{
   
    public IProduct CreateProduct()
    {
   
        return new ProductB();
    }
}

// 客户端代码
public class Client
{
   
    private IFactory factory;

    public Client(IFactory factory)
    {
   
        this.factory = factory;
    }

    public void UseProduct()
    {
   
        IProduct product = factory.CreateProduct();
        product.Use();
    }
}

// 使用示例
Client clientA = new Client(new FactoryA());
clientA.UseProduct(); // 输出:使用产品A

Client clientB = new Client(new FactoryB());
clientB.UseProduct(); // 输出:使用产品B

在这个示例中,抽象工厂接口 IFactory 定义了一个 CreateProduct 方法,用于创建产品。具体工厂 FactoryAFactoryB 实现了 IFactory 接口,并分别创建了具体产品 ProductAProductB。客户端代码 Client 接收一个工厂对象,并使用工厂对象创建产品并使用。这样,客户端代码就可以通过更换工厂对象来创建不同的产品。

目录
相关文章
|
7月前
|
设计模式 Java
设计模式之工厂
设计模式之工厂
|
1月前
|
设计模式 前端开发 JavaScript
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
35 2
|
4月前
|
设计模式 JavaScript 前端开发
从工厂到单例再到策略:Vue.js高效应用JavaScript设计模式
【8月更文挑战第30天】在现代Web开发中,结合使用JavaScript设计模式与框架如Vue.js能显著提升代码质量和项目的可维护性。本文探讨了常见JavaScript设计模式及其在Vue.js中的应用。通过具体示例介绍了工厂模式、单例模式和策略模式的应用场景及其实现方法。例如,工厂模式通过`NavFactory`根据用户角色动态创建不同的导航栏组件;单例模式则通过全局事件总线`eventBus`实现跨组件通信;策略模式用于处理不同的表单验证规则。这些设计模式的应用不仅提高了代码的复用性和灵活性,还增强了Vue应用的整体质量。
69 1
|
4月前
|
设计模式 XML 数据格式
python之工厂设计模式
python之工厂设计模式
python之工厂设计模式
|
4月前
|
设计模式 测试技术
依赖注入与工厂设计模式的区别
【8月更文挑战第22天】
81 0
|
6月前
|
设计模式 Java 编译器
设计模式——创建型模式(工厂,简单工厂,单例,建造者,原型)
设计模式——创建型模式(工厂,简单工厂,单例,建造者,原型)
|
5月前
|
设计模式 Java 开发者
工厂设计模式的实现与应用场景分析
工厂设计模式的实现与应用场景分析
|
7月前
|
设计模式
设计模式之工厂 Factory
设计模式之工厂 Factory
64 1
|
7月前
|
设计模式 存储 JavaScript
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
|
7月前
|
设计模式 Java Go
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式