工厂方法模式的真实世界示例

dev*_*ull 26 design-patterns factory-pattern

我刚读了Factory Method.据我所知,它提供了一种将实例化委托给子类的方法.但我无法理解现实场景中的可能用途.

任何人都可以给出一个典型的例子,展示如何使用Factory方法模式,以便我可以与我所读到的内容相关联.

工厂方法模式是最佳解决方案的问题陈述足以使其清楚.

Sar*_*raz 51

实现工厂设计模式的类充当多个类之间的桥梁.考虑使用SQL Server和Oracle等多个数据库服务器的示例.如果您正在使用SQL Server数据库开发应用程序作为后端,但是将来需要将后端数据库更改为oracle,如果您没有按照工厂设计模式编写代码,则需要修改所有代码.

在工厂设计模式中,您需要做很少的工作才能实现这一目标.实施工厂设计模式的课程会照顾您并减轻您的负担.从数据库服务器切换根本不会打扰你.您只需要在配置文件中进行一些小的更改.

  • 上面的示例代码目前不可用.所以我发现这个链接及其有用.. http://www.primaryobjects.com/CMS/Article81.aspx (3认同)
  • 为什么不直接使用通用接口和依赖注入呢?例如 `IDatabase` 在 DI 可以很好地处理的情况下,工厂模式似乎有点过分了。 (3认同)

Mo *_*ami 8

一个示例PHP代码:

interface DbTable
{
    public function create($array);
}

class MySqlTable implements DbTable
{
    public function create($array)
    {
        // add a record to a table on mysql database
    }
}

class OracleTable implements DbTable
{
    public function create($array)
    {
        // add a record to a table on oracle database
    }
}

class TableFactory
{
    private $dbTypeConfig = 'mysql';

    public function createTable()
    {
        if ($this->dbTypeConfig == 'mysql') {
            return new MySqlTable();
        } elseif ($this->dbTypeConfig == 'oracle') {
            return new OracleTable();
        }
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这看起来更像简单工厂而不是工厂方法模式。根据我的理解,工厂方法模式提供了多个具体工厂,这些工厂创建从同一抽象产品继承的具体产品的实例。如果我觉得只有一个工厂就足以根据客户端传递的类型字符串(或枚举)来决定要实例化哪个具体产品,那么即使简单工厂也足够了。为什么在这种情况下我们需要使用工厂方法模式? (3认同)