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