软件设计 2016-11-22
简单工厂简述:
简单工厂模式实现了生产产品类的代码跟客户端代码分离,在工厂类中你可以添加需要生成长跑的逻辑代码(new 产品类),但是问题来了,优秀的代码是符合“开闭原则”如果你要加一个C类产品,你就要修改工厂类里面的代码,也就是说要增加条件语句如:switch---case。对于这个问题,接下来的工厂方法模式可以解决这个问题。
一、 什么是工厂方法模式
工厂方法是针对每一种产品提供一个工厂类。通过不同的工厂实例来创建不同的产品实例。
在同一等级结构中,支持增加任意产品。
二、 工厂方法模式的优点
三、使用场景
四、工厂方法模式的组成
产品类:
<?php
    abstract class DataBase
    {
        abstract function connect();
        abstract function getOne();
    }
    
    class MySql extends DataBase
    {
        function connect() {
            return "MySql连接对象返回";
        }
    
        function getOne()
        {
            return "MySql返回查询结果";
        }
    }
    
    class SqlServer extends DataBase{
        function connect()
        {
            return "SqlServer连接对象返回";
        }
    
        function getOne()
        {
            return "SqlServer返回查询结果";
        }
    }  工厂类:
<?php
    abstract class FactoryDataBase{
        function createDataBase(){}
    }
    
     class FactoryMySql extends FactoryDataBase
    {
        public function createDataBase()
        {
            return new MySql();
        }
    }
    
    class FactorySqlServer extends FactoryDataBase
    {
        public function createDataBase()
        {
            return new SqlServer();
        }
    }   客户端:
<?php
    $mysql = new FactoryMySql();
    $db = $mysql->createDataBase();  工厂方法模式仿佛已经很完美的对对象的创建进行了包装,使得客户程序中仅仅处理抽象产品角色提供的接口。那我们是否一定要在代码中遍布工厂呢?大可不必。也许在下面情况下你可以考虑使用工厂方法模式:
如果有什么疑问或者讲错的地方,欢迎大家留言。
一、 工厂方法模式的组成