欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

工厂方法模式(Factory Method Pattern)

程序员文章站 2022-06-15 11:53:47
...

水果店开业在即,小明需要去进货,考虑到水果的种类和成本问题决定先去探访一下货源和价格,小明发现苹果在A商那边便宜2毛,西瓜在Z商那边便宜3毛,榴莲在C商那边便宜4毛。这里每一个商贩是一个工厂,每个工厂提供不同的水果,下面我们来介绍工厂方法模式

工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,但是让子类决定哪一个类实例化,工厂方法模式让一个类的实例化延迟到其子类。

工厂方法模式是一个创建型模式,下面我们来看看他的结构图:

工厂方法模式(Factory Method Pattern)

工厂方法的实现:

Product(抽象产品):定义产品的接口,是所有产品对象的公共父类

interface Product
{
    void TestMethod();
}

Concrete Product(具体产品):实现抽象产品的具体产品

class ConcreteProduct : Product
{
    public void TestMethod()
    {
        Console.WriteLine("Hello World!");
    }
}

Factory(抽象工厂):定义工厂的接口,它是工厂方法的核心所有的工厂都必须实现抽象工厂,并且返回产品

interface Factory
{
    Product FactoryMethod();
}

Concrete Factory(具体工厂):实现抽象工厂的具体工厂

class ConcreteFactory : Factory
{
    public Product FactoryMethod()
    {
        return new ConcreteProduct();
    }
}

具体调用实现:

Factory factory = new ConcreteFactory();
Product product = factory.FactoryMethod();
product.TestMethod();

工厂方法的优点:

1.工厂方法用来创建客户所需的产品,同时还向客户隐藏了具体产品实例化的细节

2.扩展性好符合开闭原则,新增一个具体产品或者具体工厂无需修改代码,只需要添加到工厂即可

工厂方法的缺点:

1.每添加一种产品需要提供对应的工厂类,系统中的类成对增加,系统在编译的时候会增加额外的开销

2.增加了系统的抽象性和理解难度

适用环境

1.客户端不知道它所需的对象的类

2.抽象工厂类通过其子类制定创建哪个对象