zoukankan      html  css  js  c++  java
  • 享元模式很好的实例

    <?php
    /**
     * 享元模式
     *
     * 运用享元技术有效的支持大量细粒度的对象
     */
    class CD
    {
        private $_title = null;
        private $_artist = null;
        public function setTitle($title)
        {
            $this->_title = $title;
        }
        public function getTitle()
        {
            return $this->_title;
        }
        public function setArtist($artist)
        {
            $this->_artist = $artist;
            echo '打印参数传来的实例:'.serialize($artist).'<br>';
        }
        public function getArtist($artist)
        {
            return $this->_artist;
        }
    }
    
    class Artist
    {
        private $_name;
        public function __construct($name)
        {
            echo "正在实例化:".$name."<br/>";
            $this->_name = $name;
        }
        public function getName()
        {
            return $this->_name;
        }
    }
    
    class ArtistFactory
    {
        private $_artists = array();
        public function getArtist($name)
        {
            if(isset($this->_artists[$name]))//传过来的参数已经被实例化了,就返回参数对应的实例
            {
                return $this->_artists[$name];
            }
            else
            {
                $objArtist = new Artist($name);//实例化一个对象
                $this->_artists[$name] = $objArtist;//这个主要记录传过来的参数已经被实例化
                return $objArtist;//返回实例
            }
        }
    }
    
    //这里享元模式的研究对象是Artist类
    $objArtistFactory = new ArtistFactory();
    $objCD1 = new CD();
    $objCD1->setTitle("title1");
    $objCD1->setArtist($objArtistFactory->getArtist('artist1'));
    $objCD2 = new CD();
    $objCD2->setTitle("title2");
    $objCD2->setArtist($objArtistFactory->getArtist('artist2'));
    $objCD3 = new CD();
    $objCD3->setTitle("title3");
    $objCD3->setArtist($objArtistFactory->getArtist('artist1'));//这个artist1对象已经存在,所以“正在实例化”那句不会输出
     
  • 相关阅读:
    软考之操作系统
    牛腩javascript(二)之正则表达式
    牛腩javascript(一)
    软考之算法
    软考之数据结构
    软考之路之刷屏开始
    XML中的几种比较
    北大青鸟ASP.NET之总结篇
    Webassembly 学习2 -- Js 与C 数据交互
    nginx-proxy_redirect
  • 原文地址:https://www.cnblogs.com/jiufen/p/5000554.html
Copyright © 2011-2022 走看看