设计模式之 : 工厂模式
来源:互联网 发布: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
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之---工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之-工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之 ------工厂模式
- 设计模式之工厂模式
- Android ListView功能扩展,实现高性能的瀑布流布局
- javascript函数
- 开始写技术博客
- bzoj 2655: calc
- Genymotion解决VirtualBox cannot start the virtual device
- 设计模式之 : 工厂模式
- Android--Android的网络通信机制
- lightoj 1147 - Tug of War
- mongodb 统计内嵌文档中某一属性的方法
- 冒泡排序(数组实现)
- Android基础入门教程——9.2 MediaPlayer播放音频与视频
- Hive中的join
- Java发送http请求并为http设置头信息
- java音视频编解码问题:16/24/32位位音频byte[]转换为小端序short[],int[],以byte[]转short[]为例