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 /** * 减少创建对象的数量,以减少内存占用和提高性能.这种类型的设计模式属于结构型模式, * 它 ...
随机推荐
- 《Entity Framework 6 Recipes》翻译系列 (3) -----第二章 实体数据建模基础之创建一个简单的模型
第二章 实体数据建模基础 很有可能,你才开始探索实体框架,你可能会问“我们怎么开始?”,如果你真是这样的话,那么本章就是一个很好的开始.如果不是,你已经建模,并在实体分裂和继承方面感觉良好,那么你可以 ...
- linux split 及优化
split 虽然不好用, 但是还是可以用一下的! 有两个方式拆分, 按固定的行数, 按固定的大小. 默认是 1000 行, 后缀长度为2, 后缀长度N是说, 分片从N个字母/数字 的最小值 到 其最大 ...
- MVC validate.js下使用 ajaxSubmit
首页定义验证实体 using System.ComponentModel.DataAnnotations; using System.Web.Mvc; namespace MvcApplication ...
- hibernate注解方法使用总结(转)
原博文地址:http://blog.sina.com.cn/s/blog_935ebb670101dnre.html 1.类级别注解 @Entity 映射实体类 @Table 映射数据库 ...
- java IO流 之 字节流
一.file类的常用操作 File file=new File("E:\\test\\javaIo"); System.out.println(file.isDirectory() ...
- Hexo的Next主题配置
使用Next主题 在这里Downloads Next主题代码 将下载的代码放在myBlog/next目录下 设置站点myBlog/_config.yml的theme字段值为next 生成新页面hexo ...
- MySQL学习笔记十四:优化(1)
SQL优化 1.查看各种SQL执行的频率 mysql> show status like 'Com_select';--Com_insert,Com_delete,connections(试图连 ...
- 使用Windows Service Wrapper快速创建一个Windows Service
前言 今天介绍一个小工具的使用.我们都知道Windows Service是一种特殊的应用程序,它的好处是可以一直在后台运行,相对来说,比较适合一些需要一直运行同时不需要过多用户干预的应用程序,这一类我 ...
- C语言 第四章 关系、逻辑运算与分支流程控制
一.关系运算 若干表达式用关系运算符连接而成,就构成关系表达式. 关系表达式中,表达式成立,其值为1(真):表达式不成立,其值为0(假).其他表达式中,其结果如果是非0则为真,结果为0则为假. 关系运 ...
- 原创:微信小程序入口猜想?
昨天看到一篇文章:是有一个人逆向了微信源码,从中发现了很多关于小程序的未公开内容,然后发布了出来,不过很快作者就删掉了文章,而我也没保留,只是隐约留下来一点点印象,就是作者推测了很多个入口:作者删掉的 ...