设计模式

单例模式(可用于窗体程序)
一个类只能够实例化一个对象

在设计的时候我们假设我们需要一个类完成在内存中只有一份的功能,我们该如何做呢?

解决办法是:我们将构造函数设置成 private ,让构造函数只能在内部被调用,而外部不能调用。这样,这个类就不能被外部用 new 的方式建立多个实例了。

以人为例:

class ren
{
        private static $dx;//用来储存生成的对象
        //私有的构造函数
        private function __construct()
        {
                
        }
        //生成对象的方法
        public static function duixiang()
        {
            if(empty(self::$dx))
            {
                self::$dx=new ren();    
            }
                return self::$dx;
        }
}

$r = Ren::DuiXiang();
$r->name = "张三";

$r1 = Ren::DuiXiang();

var_dump($r1);

在里面我们用empty来判断里面是否为空,如果为空就将其添加进去,不为空就返回。

好处:无论获取多少次,返回的都是同一个对象。不会额外的去重复创建自己的复本。大大的节省了系统资源的浪费。

 

 

工厂模式

class suan
{
    public $a;
    public $b;
    
    function jia()
    {
        return $this->a+$this->b;
    }
    function jian()
    {
        return $this->a-$this->b;
    }
}

这种的方式安全性不好

 

class YunSuan
{
    public $a;
    public $b;
    
    function Suan()
    {
    }
}

class Jia extends YunSuan
{
    function Suan()
    {
        return $this->a+$this->b;
    }
}

class Jian extends YunSuan
{
    function Suan()
    {
        return $this->a-$this->b;
    }
}
$s = new Jian();
$s->a=10;
$s->b=5;
echo $s->Suan();

扩展性好相对安全

 

工厂类

class YunSuan
{
    public $a;
    public $b;
    
    function Suan()
    {
    }
}

class Jia extends YunSuan
{
    function Suan()
    {
        return $this->a+$this->b;
    }
}

class Jian extends YunSuan
{
    function Suan()
    {
        return $this->a-$this->b;
    }
}

 

class GongChang
{
    static function ShengChan($f)
    {
        switch($f)
        {
            case "+":
                return new Jia();
                break;
            case "-":
                return new Jian();
                break;
        }
    }
}

$r = GongChang::ShengChan("-");
$r->a=10;
$r->b=5;
echo $r->Suan();

 

转载于:https://www.cnblogs.com/douchenchen/p/6742505.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值