php、java 实现享元模式

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

类图
这里写图片描述

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实现

<?php
abstract 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值