美文网首页程序员
设计模式/抽象工厂:通通都来抽象吧

设计模式/抽象工厂:通通都来抽象吧

作者: Allan_野草 | 来源:发表于2018-09-08 17:45 被阅读42次

一、why use it

简单说一下简单工厂模式:

Class DatabaseFactory
{
  function getDB (var command) {
    switch command
      case 'mysql':
        return new Mysql();
      case 'oracle':
        return new Oracle();
      // ...
  }
}

// ------------------------------
// 业务代码
var client =  DatabaseFactory.getDB('mysql');
print client.select('select * from `table` ...');// 底层已经从mysql换成oracle

这种设计模式下,当业务有变动,比如数据库从mysql,换成oracle。
我们只需要
1、在工厂类里加一个case
2、在业务代码getDB的时候换成'oracle'就可以了

即可实现业务改动。

那么,它有什么缺点?

新增case,把oracle初始化、注入依赖的代码,写在工厂类里,导致代码臃肿,这个工厂类的功能也不够单一。

从设计思想上,新增功能,应该只加代码,尽可能不改动原有代码。

那么就有了抽象工厂的出现。

二、How to use

当然,上面的例子中,为了从mysql换成oracle,接口能对得上,不用改业务代码,它们都应该实现同一套接口或者说是继承一个抽象类。

Abstract Class Database
{
  function connect(var host,var port,...) {}
  function select (var sql) {} 
  function update(var sql) {}
 // ...
}

// mysql 
Class Mysql extends Database
{
  // 具体不同的实现
}

而抽象工厂模式,简而言之,就是连这个工厂,也是抽象的。

Abstract Class DatabaseFactory
{
  function getDB () {}
}

// mysql
Class MysqlFactory extends DatabaseFactory
{
  // 实现这个方法
  function getDB () {
    var msyql = new Mysql();
    // 初始化
    mysql.host = '192.168.0.2';
    // ...
    return mysql;
  }
}

// ------------------------------------------
// 业务代码
DatabaseFactory f = new MysqlFactory();
Database db = f.getDB();
db.select(...);

那么,如果我们需求要换成oracle,只需要
1、写个工厂类继承抽象工厂类
2、new的时候,改成OracleFactory

甚至可以不改动业务代码,可以把这个写在配置文件,通过配置文件来new不同的工厂类。这样一来,几乎不用改动原有代码。不用改动原有代码,意味着。。。不用加班 (〃´皿`)q !

相关文章

  • 设计模式/抽象工厂:通通都来抽象吧

    一、why use it 简单说一下简单工厂模式: 这种设计模式下,当业务有变动,比如数据库从mysql,换成or...

  • Android 源码设计模式解析与实战 读书笔记 6 抽象工厂模

    创建型设计模式 —— 抽象工厂模式 1. 抽象工厂模式介绍 抽象工厂模式(Abstract Factory Pat...

  • Go语言设计模式(3)抽象工厂模式

    Go语言设计模式(3)抽象工厂模式 抽象工厂模式的定义 抽象工厂模式的定义如下: Provide an inter...

  • 设计模式-抽象工厂模式

    1 抽象工厂模式介绍 抽象工厂模式(Abstract Factory Pattern)也是创建型设计模式之一,抽象...

  • 设计模式四、抽象工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 抽象工厂模式 ...

  • 设计模式之工厂模式

    简单工厂 工厂方法 抽象工厂 代码都来源于生活,设计模式同样是生活中某些事物的抽象。 例如工厂模式,比如一个生产衣...

  • 设计模式系列-抽象工厂模式

    JAVA设计模式系列: 单例模式 观察者模式 模板方法模式 简单工厂模式 抽象工厂模式 抽象工厂模式 定义 抽象工...

  • 单件设计模式

    一、定义 设计模式 设计模式就是一种更好的编写代码方案。 常见设计模式 工厂设计模式、抽象工厂设计模式、抽象工厂设...

  • 常用设计模式

    设计模式 工厂模式 工厂模式思路上分:简单工厂模式,工厂模式, 抽象工厂模式// 抽象工厂模式可以代替工厂模式,做...

  • 2021-11-16 - 学习记录

    设计模式学习:创建型:工厂(工厂方法,抽象工厂),建造者,单例,原型 设计模式:工厂模式 简单工厂 工厂方法 抽象工厂

网友评论

    本文标题:设计模式/抽象工厂:通通都来抽象吧

    本文链接:https://www.haomeiwen.com/subject/xaclgftx.html