<?php
/* 实例4 */
/* 使用工厂类解析图像工作 */
interface IImage {
function getWidth();
function getHeight();
function getData();
}
class Image_PNG implements IImage {
protected $_width, $height, $_data; public function __construct($file) {
$this->_file = $file;
$this->_parse();
} private function _parse() {
//完成PNG格式的解析工作
//并填充$_width, $_height, $_data
$this->_data = getimagesize($this->_file);
list($this->_width, $this->_height) = $this->_data;
} public function getWidth() {
return $this->_width;
} public function getHeight() {
return $this->_height;
} public function getData() {
return $this->_data;
}
}
class Image_JPGE implements IImage { protected $_width, $_height, $_data; public function __construct($file) {
$this->_file = $file;
$this->_parse();
} private function _parse() {
//完成JPGE格式的解析工作
//并填充$_width, $_height, $_data
//$this->_width = imagesx($this->_file);
//$this->_height = imagesx($this->_file);
$this->_data = getimagesize($this->_file);
list($this->_width, $this->_height) = $this->_data;
} public function getWidth(){
return $this->_width;
} public function getHeight(){
return $this->_height;
} public function getData() {
return $this->_data;
}
}
class ImageFactory {
public static function factory($file) {
$filename = pathinfo($file);
switch(strtolower($filename['extension'])){
case 'jpg':
$return = new Image_JPEG($file);
break;
case 'png':
$return = new Image_PNG($file);
break;
default:
echo '图片类型不正确';
break;
}
if($return instanceof IImage) {
return $return ;
} else {
echo '出错了';
exit();
}
} }
$image = ImageFactory::factory('path/my.png');
var_dump($image->getWidth());
echo '<br>';
print_r($image->getheight());
echo '<br>';
print_r($image->getData());

IImage--factory的更多相关文章

  1. PHP设计模式(三)抽象工厂模式(Abstract Factory For PHP)

    一.什么是抽象工厂模式 抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象 ,而且使用抽象工厂模式还要满足以下条件: 系统中有多个产品族,而系统一次只可能消费其中一族产品. 同 ...

  2. PHP设计模式(一)简单工厂模式 (Simple Factory For PHP)

    最近天气变化无常,身为程序猿的寡人!~终究难耐天气的挑战,病倒了,果然,程序猿还需多保养自己的身体,有句话这么说:一生只有两件事能报复你:不够努力的辜负和过度消耗身体的后患.话不多说,开始吧. 一.什 ...

  3. 菜鸟理解的工厂模式(Factory Pattern)是什么样子的?

    直接开始说了,不浪费园友宝贵的时间! 什么是工厂模式? 在学习前,先问一下:"它是什么?". 工厂模式,它是项目里面常用的设计模式之一. 它是属于创建型模式,简单的理解创建型模式就 ...

  4. Angular Service和Factory应用的区别

    Service可以用来将返回同类业务的多种返回值 Factory可以用来提供对同类业务的多个方法的调用 另外:Provider可以用来封装各独立职责

  5. 【解决方案】 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userHandler': Injection of resource dependencies failed;

    一个错误会浪费好多青春绳命 鉴于此,为了不让大家也走弯路,分享解决方案. [错误代码提示] StandardWrapper.Throwableorg.springframework.beans.fac ...

  6. Design Patterns Simplified - Part 3 (Simple Factory)【设计模式简述--第三部分(简单工厂)】

    原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part3-factory/ Design ...

  7. C#设计模式之简单工厂模式(Simple Factory)

    1. 概述 简单工厂模式就是将一个类的实例化交给一个静态工厂来执行. 2. 使用频率 中 3. 模式结构 3.1 机构图 3.2 模式中的角色 Product:抽象类,把具体产品类公共的代码进行抽象和 ...

  8. Task.Factory.StartNew的用法

    代码: private void button5_Click(object sender, EventArgs e) { ; Task.Factory.StartNew(() => { Mess ...

  9. 使用Setup Factory安装包制作工具制作安装包

    在我们开发完软件后,除了极个别案例我们把整个目录复制给客户用外,我们一般都需要做成安装包,方便整个软件的部署操作,以安装包的部署操作可能简单的是复制文件,也可能包括一些注册表.数据库等额外的操作,不过 ...

  10. 设计模式 — 简单工厂模式(Simple Factory)

    定义:定义一个工厂类,它可以根据参数的不同返回不同类型的实例,被创建的实例通常有公共的父类. 模式类型:创建型模型 Factory(工厂角色):即工厂类,负责实现创建所有产品实例的内部逻辑:工厂类可以 ...

随机推荐

  1. Python:Dom生成XML文件(写XML)

    http://www.ourunix.org/post/327.html 在python中解析XML文件也有Dom和Sax两种方式,这里先介绍如何是使用Dom解析XML,这一篇文章是Dom生成XML文 ...

  2. IIS5.1、IIS6.0、IIS7.5中安装配置MVC 3

    本文主要介绍在IIS5.1.IIS6.0.IIS7.5中安装配置MVC 3的具体办法! 正文: IIS5.1 1. 安装Microsoft .net FrameWork 4.0安装包; 2. 安装AS ...

  3. 压力测试工具集合(ab,webbench,Siege,http_load,Web Application Stress)

    压力测试工具集合(ab,webbench,Siege,http_load,Web Application Stress) 1 Apache附带的工具ab ab的全称是ApacheBench,是Apac ...

  4. python在windows系统中打印中文乱码

    转自:http://www.111cn.net/phper/python/58920.htm 中文乱码对于程序开发人员来讲不是什么怪事情了,今天我在使用python打印中文时就出现乱码了,下面我们一起 ...

  5. JFinal中Controller的应用

    部分方法: 1.获取参数:getPara(String name); getParaToInt(String name) ,将返回参数的值转为int: getPara() ,url中参数连接为/v1- ...

  6. inside when() you don't call method on mock but on some other object

    错误原因:调用静态方法,要事先引入静态类,否则mock的时候会默认为测试的类 解决方法:@PrepareForTest({SecurityContextHolder.class})引入静态类 注:@P ...

  7. cpu使用率高问题

    然后:

  8. 分析Memcached客户端如何把缓存数据分布到多个服务器上

    Memcached客户端可以设多个memcached服务器,它是如何把数据分发到各个服务器上,而使各个服务器负载平衡的呢? 可以看看.net版中的客户端中的源码,就可以知道 先看代码:   1 /// ...

  9. 当客户端提交更新数据请求时,是先写入edits,然后再写入内存的

    http://blog.sina.com.cn/s/blog_6f83c7470101b7d3.html http://blog.csdn.net/slq1023/article/details/49 ...

  10. 04 Memcached过期机制与删除机制

    一:Memcached过期机制(1)当某个值过期后,并没有从内存删除,因此stats统计时,curr_item有气信息.(2)如果之前有没有get取其值时,将不会自动删除.当某个新值去占用他的位置的时 ...