前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式 | 工厂方法模式

设计模式 | 工厂方法模式

作者头像
憧憬博客
发布2020-07-20 17:12:19
2840
发布2020-07-20 17:12:19
举报
文章被收录于专栏:憧憬博客分享憧憬博客分享

说明

这个设计模式属于创建型, 也是常用设计模式之一, 工厂模式分为: 简单工厂、工厂方法、静态工厂、抽象工厂

我们这篇主要介绍工厂方法模式, 工厂方法就是为了解决简单工厂扩展性的问题,相信大家再看简单工厂是也发现了其缺陷,以前简单工厂要扩展的时候,需要修改工厂内容,这就违背了设计模式对外扩展开放,对内修改关闭原则

流程图
流程图
  • 应用场景
  1. 当你不知道该使用对象的确切类型的时候 客户程序使用的对象存在变动的可能,或者根本就不知道使用哪一个具体的对象。
  2. 当你希望为库或者框架提供扩展其内部组件的方法时
  • 主要优点
  1. 解耦
  2. 符合原则
  • 主要组成
  1. 抽象工厂接口
  2. 工厂接口的实现
  3. 抽象产品
  4. 具体产品

示例

  • 多种数据库操作使用工厂方法实现
代码语言:javascript
复制
<?php
/**
 * Created by 憧憬.
 */


/**
 * 定义基础数据库操作
 * Interface DataBase
 */
interface DataBase
{
    function connect();

    function first();
}


/**
 * Mysql操作
 * Class MySql
 */
class MySql implements DataBase
{
    function connect()
    {
        return "MySQL连接对象返回";
    }

    function first()
    {
        return "MySQL返回查询结果";
    }
}

/**
 * pgsql操作
 * Class PgSqlServer
 */
class PgSqlServer implements DataBase
{
    function connect()
    {
        return "Pgsql连接对象返回";
    }

    function first()
    {
        return "Pgsql返回查询结果";
    }
}


/**
 * 声明工厂约束
 * Interface FactoryDataBase
 */
interface FactoryDataBase{

    function createDataBase();

}

/**
 * mysql工厂实现
 * Class MySqlFactory
 */
class MySqlFactory implements FactoryDataBase
{
    public function createDataBase()
    {
        return new MySql();
    }
}

/**
 * pgsql工厂实现
 * Class SqlServerFactory
 */
class SqlServerFactory implements FactoryDataBase
{
    public function createDataBase()
    {
        return new PgSqlServer();
    }
}


/**
 * 这样做的话 对于增加新的连接没有任何影响,客户端无需感知, 例如我多增加一个oracle数据库的操作 使用者
 * 不需要知道这个东西如何创建, 而我们只需要声明好接口即可
 */

$server = new MySqlFactory();


$db = $server->createDataBase();
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 说明
  • 示例
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档