设计模式之 : 工厂模式

来源:互联网 发布:sublime php错误提示 编辑:程序博客网 时间:2024/06/11 01:49

工厂模式使用场景:

简单来说,当需求对类的个数不明确的时候,可以使用工厂模式,如:你需要创建一个在线博物馆,但你并不确切的知道究竟有多少文物,你不可能无限的增加新的文物类,同时对于损毁的文物,你不可能无限的去清理这些类。反过来说,如果你确切的知道类的总量,那么你就没有必要使用工厂模式,直接通过继承的方式就能实现好的设计。

实例1:

<?php//设定数据库接口interface Db{    public function realwork();}//设定工厂接口interface Factory{    public function facWorking();}//MySQL实际功能类class Mysql implements Db{    public function realWork(){        return '开始使用mysql';    }}//Oracleclass Oracle implements db{    public function realWork(){        return '开始使用oracle';    }}//NoSQL实际功能类class Nosql implements db{    public function realWork(){        return '开始使用nosql';    }}//对外展示的MySQL工厂类class FacMysql implements factory{    protected static $database;    public function facWorking(){        self::$database = new Mysql();        return self::$database->realWork();    }}//对外展示的Oracle工厂类class FacOracle implements factory{    protected static $database;    public function facWorking(){        self::$database = new Oracle();        return self::$database->realWork();    }}//对外展示的NoSQL工厂类class FacNosql implements factory{    protected static $database;    public function facWorking(){        self::$database = new Nosql();        return self::$database->realWork();    }}//现在我想实现MySQL数据库的功能,但是我只需要调用MySQL的工厂类即可,我无法并且也没必要知道,实际类和方法的名字$db = new facMysql();print_r($db->facWorking()); //output:开始使用MySQL?>

实例2:

<?phpinterface IUser{  function getName();}class User implements IUser{  public function __construct( $id ) { }  public function getName()  {    return "Jack";  }}class UserFactory{  public static function Create( $id )  {    return new User( $id );  }}$uo = UserFactory::Create( 1 );echo( $uo->getName()."\n" );?>
0 0
原创粉丝点击