php 实现设计模式之 享元模式
<?php
class Book{
public $title;
public $author; public function __construct($title,$author){
$this->author = $author;
$this->title = $title;
} public function getTitle(){
return $this->title;
} public function getAuthor(){
return $this->author;
}
} class BookFactory{
public $books; public function add($book){
$this->books[] = $book;
} public function getBook($title){
if(empty($this->books[$title])){//建立title和book的对应关系。
$this->books[$title] = new Book($title, '李白');
}
return $this->books[$title];
}
} class BookShelf{
public $shelf; public function add($book){
$this->shelf[] = $book;
} public function show(){
foreach ($this->shelf as $value){
echo '作者 :'.$value->getAuthor().' 标题:'.$value->getTitle();
echo "<br/>";
}
}
} class Client{
public static function main(){
$obj = new BookFactory();
$shelf = new BookShelf(); $book_1 = $obj->getBook('静夜思');
$book_2 = $obj->getBook('望天门山');
$book_3 = $obj->getBook('望庐山瀑布');
$book_4 = $obj->getBook('静夜思');//book4 服用的book1. if($book_1 === $book_4){
echo 'book1 is as the same as book4';
} $shelf->add($book_1);
$shelf->add($book_2);
$shelf->add($book_3); $shelf->show(); }
} Client::main();
?>
UML类图如下:

补充一个实例:
<?php
//一个产品有ISBN号和名字
class Product{
public $ISBN;
public $name;
} //享元类,提取出共性,同一个ISBN号对应的名字不会变,把这本书名字提取出来,放入享元对象,这样享元对象就存储了内蕴状态,外蕴状态是ISBN号码 class Book{
public $name;
public function __construct($name){
$this->name = $name;
}
public function show(){
echo $this->name;
} } //享元对象生产工厂,传入外蕴对象,返回对应的享元对象。
class BookFactory{
public $books = array();
public function getBook($ISBN,$name){//维护一个对象池
if(!isset($this->books[$ISBN])){
$this->books[$ISBN] = new Book($name);
}
return $this->books[$ISBN];
}
} $obj = new BookFactory();
$book = $obj->getBook('1111','PHP高级程序设计');
$book2 = $obj->getBook('1111','');
$book2->show();
?>
php 实现设计模式之 享元模式的更多相关文章
- 乐在其中设计模式(C#) - 享元模式(Flyweight Pattern)
原文:乐在其中设计模式(C#) - 享元模式(Flyweight Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 享元模式(Flyweight Pattern) 作者:weba ...
- python设计模式之享元模式
python设计模式之享元模式 由于对象创建的开销,面向对象的系统可能会面临性能问题.性能问题通常在资源受限的嵌入式系统中出现,比如智能手机和平板电脑.大型复杂系统中也可能会出现同样的问题,因为要在其 ...
- 【GOF23设计模式】享元模式
来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_享元模式.享元池.内部状态.外部状态.线程池.连接池 package com.test.flyweight; /** * ...
- 设计模式之享元模式(Flyweight)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- Head First设计模式之享元模式(蝇量模式)
一.定义 享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能.这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式. ...
- 【Unity3D与23种设计模式】享元模式(Flyweight)
GoF中定义: "使用共享的方式,让一大群小规模对象能更有效地运行" 享元模式一般应用在游戏角色属性设置上 游戏策划需要通过"公式计算"或者"实际测试 ...
- Java进阶篇设计模式之七 ----- 享元模式和代理模式
前言 在上一篇中我们学习了结构型模式的组合模式和过滤器模式.本篇则来学习下结构型模式最后的两个模式, 享元模式和代理模式. 享元模式 简介 享元模式主要用于减少创建对象的数量,以减少内存占用和提高性能 ...
- Java设计模式之七 ----- 享元模式和代理模式
前言 在上一篇中我们学习了结构型模式的组合模式和过滤器模式.本篇则来学习下结构型模式最后的两个模式, 享元模式和代理模式. 享元模式 简介 享元模式主要用于减少创建对象的数量,以减少内存占用和提高性能 ...
- 【设计模式】享元模式(Flyweight)
摘要: 1.本文将详细介绍享元模式的原理和实际代码中特别是Android系统代码中的应用. 纲要: 1. 引入享元模式 2. 享元模式的概念及优缺点介绍 3. 享元模式在Android源码中的应用 1 ...
- 设计模式之享元模式(PHP实现)
github地址:https://github.com/ZQCard/design_pattern /** * 减少创建对象的数量,以减少内存占用和提高性能.这种类型的设计模式属于结构型模式, * 它 ...
随机推荐
- 为CentOS7(文字界面操作)系统安装gnome图形界面程序
1.安装gnome sudo yum groupinstall "GNOME Desktop" "Graphical Administration Tools" ...
- failed to load the jni shared library jvm
启动eclipse luna时候出现的, 原因在于,eclipse要求jdk是 32位的, 而我本机安装的是 64的!
- spring快速入门(一)
对于为什么使用spring框架,这里不多做解释,详情请百度.本人推荐面向驱动程序学习,通过实战来瞧瞧spring技术的伟大.所以先来看看原始开发一个简单的例子,由例子引入spring相关的技术.如果错 ...
- HTTP学习一:HTTP基础知识
1 HTTP介绍 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议. 它的发展是万维网协会(World Wid ...
- Android开发-之数据的存储方式一
在Android中,数据的存储分为两种方式: 1.直接以文件的形式存储在目录中 2.以json格式存储在数据库中 将数据以文件的存储又分为两种方式: 1.生成.txt文件 2.生成xml文件 那么今天 ...
- html5多出来的字自动隐藏并显示...
- ExtJs4之Grid详细
ExtJs博客前奏 由于这段时间事情比较杂乱,博客就主要以项目中例子来说明编写. ExtJs4中的Grid非常强大,有展示,选中,搜索,排序,编辑,拖拽等基本功能,这篇博客我就这几个功能做写累述. 1 ...
- OpenCascade Draw Test Harness
OpenCascade Draw Test Harness eryar@163.com Abstract. Draw is a command interpreter based on Tcl/Tk ...
- Form authentication(表单认证)问题
前言 最近在做ASP.NET MVC中表单认证时出了一些问题,特此记录. 问题 进行表单认证时,在 PostAuthenticateRequest 事件中从Cookie值中解密票据.如下: prote ...
- JavaScript阻塞剖析与改善
一.阻塞特性 <高性能JavaScript>一书中,关于第一章“Loading and Execution”,提到了无阻塞加载JavaScript技术,目的是为了提高页面呈现速度. 说到无 ...