在编程中,会遇到很多类文件代码类似,功能相似,但是业务处理却要求这些类作为单独的类存在,于是需要建立不同的文件来进行相应的实现这些类。
这时候,我们是否可以考虑将这些类使用工厂模式来实现。用一个工厂类来返回这些类似接口的不同的类。
工厂模式是多态的,可以通过他替换类,修改配置,从而使程序变得更加灵活。 编写工厂模式的关键是类中要包含一个静态方法,这个静态方法可以接受任意数据的参数,结果返回我们需要的具体的对象。
下面通过代码实例来实现一个简单的工厂类:
常见的nosql中有memcache、mongodb、redis等,这里我们不讨论这些nosql,而是通过工厂根据自己的需要来实现对他们的初始化.
首先建立一个工厂类:
01 | <?php |
02 | class Http{ |
03 | public function __construct(){} |
04 |
05 | // 工厂方法 |
06 | public function Cache( $class ) |
07 | { |
08 | $class = strtoupper ( $class ); |
09 | switch ( $class ) { |
10 | case 'memcache' : |
11 | include 'Cache/Memcache.class.php' ; |
12 | return new Cache_Memcache(); |
13 | break ; |
14 | case 'mongodb' : |
15 | include 'Cache/MongoDB.class.php' ; |
16 | return new Cache_MongoDB(); |
17 | break ; |
18 | case 'redis' : |
19 | include 'Cache/Redis.class.php' ; |
20 | return new Cache_Redis(); |
21 | break ; |
22 | } |
23 | } |
24 | } |
25 | ?> |
建立文件夹Cache,并分别文件Memcache.class.php、MongoDB.class.php、Redis.class.php文件,并分别实现:
Memcache.class.php:
01 | <?php |
02 | class Cache_Memcache{ |
03 | public function getInstance(){ |
04 | // Memcache实例化方法 |
05 | $_mc = new Memcached(); |
06 | ... |
07 | return $_mc ; |
08 | } |
09 |
10 | public __construct(){ |
11 | $mc = $this ->getInstance(); |
12 | return $mc ; |
13 | } |
14 | } |
15 | ?> |
MongoDB.class.php
01 | <?php |
02 | class Cache_MongoDB{ |
03 | public function getInstance(){ |
04 | // MongoDB实例化方法 |
05 | } |
06 |
07 | public __construct(){ |
08 | $mongo = $this ->getInstance(); |
09 | return $mongo ; |
10 | } |
11 | } |
12 | ?> |
Redis.class.php
01 | <?php |
02 | class Cache_Redis{ |
03 | public function getInstance(){ |
04 | // Redis实例化方法 |
05 | } |
06 |
07 | public __construct(){ |
08 | $redis = $this ->getInstance(); |
09 | return $redis ; |
10 | } |
11 | } |
12 | ?> |
4个文件就构成了工厂模式实现的过程,这个时候我们通过下面的方法进行使用:
1 | <?php |
2 | $creator = new Cache(); // 实例化工厂类 |
3 | $redisObj = $creator ->factory( 'redis' ); // 创建获得相应的cache类 |
4 | ?> |
完结。