php、java 实现享元模式

来源:互联网 发布:代理软件是fg 编辑:程序博客网 时间:2024/06/16 09:14

避免无限制的创建对象,建立一个对象池,将可以共享的对象存起来复用。

类图
这里写图片描述

java实现

public abstract class Flyweight {    private String intrinsic;    protected final String extrinsic;    public Flyweight(String extrinsic){        this.extrinsic = extrinsic;    }    public abstract void operate();    public String getIntrinsic(){        return intrinsic;    }    public void setIntrinsic(String intrinsic){        this.intrinsic = intrinsic;    }}
public class ConcreteFlyweight extends Flyweight {    public ConcreteFlyweight(String extrinsic) {        super(extrinsic);    }    @Override    public void operate() {    }}
public class FlyweightFaculty {    private static HashMap<String,Flyweight> pool = new HashMap<>();    public static Flyweight getFlyweight(String extrinsic){        Flyweight flyweight = null;        if(pool.containsKey(extrinsic)){            flyweight = pool.get(extrinsic);        }else{            flyweight = new ConcreteFlyweight(extrinsic);            pool.put(extrinsic,flyweight);        }        return flyweight;    }}

php实现

<?phpabstract class Flyweight{    private $intrinsic;    protected $extrinsic;    public function __construct($extrinsic)    {        $this->extrinsic = $extrinsic;    }    public abstract function operate();    public function getIntrinsic()    {        return $this->intrinsic;    }    public function setIntrinsic($intrinsic)    {        $this->intrinsic = $intrinsic;    }}class ConcreteFlyweight extends Flyweight{    public function __construct($extrinsic)    {        parent::__construct($extrinsic);    }    public function operate()    {    }}class FlyweghtFaculty{    public static $pool = array();    public function getFlyweight($key)    {        if(array_key_exists($key,FlyweghtFaculty::$pool))        {            $flyWeight = FlyweghtFaculty::$pool[$key];            echo 'cache';        }        else        {            $flyWeight = new ConcreteFlyweight($key);            FlyweghtFaculty::$pool[$key] = $flyWeight;            echo 'create';        }        return $flyWeight;    }}$faculty = new FlyweghtFaculty();$faculty->getFlyweight('111');$faculty->getFlyweight('111');
0 0
原创粉丝点击