软件设计 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(); 工厂方法模式仿佛已经很完美的对对象的创建进行了包装,使得客户程序中仅仅处理抽象产品角色提供的接口。那我们是否一定要在代码中遍布工厂呢?大可不必。也许在下面情况下你可以考虑使用工厂方法模式:
如果有什么疑问或者讲错的地方,欢迎大家留言。
一、 工厂方法模式的组成