PHP设计模式:工厂(静态方法里调用newobj的方法)单例(三私一公newself)注册树(使用静态变量数组存取对象)适配器(主体建立接口适配器丰富方法)

工厂:使用工厂类的静态方法新建需要的对象 然后在外面直接调用静态方法新建对象

<?php

//要创建对象实例的类
class MyObject{

}
//工厂类
class MyFactory{
    public static function factory(){
        return new MyObject();
   }
}


$instance=MyFactory::factory();
// D:\phpstudy\PHPTutorial\WWW\phpCollection\PHPDesignPattern\1.工厂.php:17:
// object(MyObject)[1]
var_dump($instance);

单例:保证一个类只生成一个对象实例 三私一公

<?php

class Single
{
    private static $obj;

    private function __construct()
    {
    }

    private function __clone()
    {
    }

    public static function getSingle()
    {
        if(self::$obj instanceof self){
            return self::$obj;
        }else{
            self::$obj = new self();
            return self::$obj;
        }
    }
}

// D:\phpstudy\PHPTutorial\WWW\phpCollection\PHPDesignPattern\2.单例.php:29:
// object(Single)[1]
$obj = Single::getSingle();
var_dump($obj);

 注册树:使用静态变量数组进行存取对象

<?php

class Obj{
    public static function newObj(){
        return new self();
    }
}

class Register
{
    public static $tree;

    public static function set($alias,$obj){
        return self::$tree[$alias] = $obj;
    }

    public static function get($alias){
        return self::$tree[$alias];
    }
}
// D:\phpstudy\PHPTutorial\WWW\phpCollection\PHPDesignPattern\3.注册树.php:25:
// object(Obj)[1]
// D:\phpstudy\PHPTutorial\WWW\phpCollection\PHPDesignPattern\3.注册树.php:28:
// object(Obj)[1]

$set = Register::set('rand',Obj::newObj());
var_dump($set);

$get = Register::get('rand');
var_dump($get);

适配器:三个概念 主体 受体 适配器

受体想要使用主体  但是没法连接起来,就抽离出来一个适配器,

适配器可以获取定义主体的方法,受体可以从适配器获取主体的信息方法,从容达到了间接连接;

主体使用interface进行定义 ;

适配器inplements主体,重新定义主体声明但没有描述的方法;

受体:受体赋值在适配器中的静态变量中,受体就可以使用适配器的所有额方法了

我们通过调用适配器的方法 就可以使用受体的方法属性,也可以使用适配器的方法属性

其实也就是你家墙上有一个两口的插座(Adaptee),但你买了一个电风扇(Target)需要三个口的,这个时候
你就需要一个插排(Adapter)。

适配器模式(Adapter)模式:将一个类的接口,转换成客户期望的另一个类的接口。适配器让原本接口不兼容
的类可以合作无间。

我们直接可以在适配器中进行丰富方法
从而
方法与受体有重叠  可以使用受体的方法
受体没有的方法  我们可以在适配器中进行丰富!
这样就可以减少主体的改动!全部在受体与适配器中进行丰富方法!

<?php

/**
 * 目标角色
 */
interface Target
{

    /**
     * 源类也有的方法1
     */
    public function sampleMethod1();

    /**
     * 源类没有的方法2
     */
    public function sampleMethod2();
}

/**
 * 源角色
 */
class Adaptee
{

    /**
     * 源类含有的方法
     */
    public function sampleMethod1()
    {
        echo 'Adaptee sampleMethod1 <br />';
    }
}

/**
 * 类适配器角色
 * 在适配器里面进行丰富主体定义的方法
 */
class Adapter implements Target
{

    private $_adaptee;

    public function __construct(Adaptee $adaptee)
    {
        $this->_adaptee = $adaptee;
    }

    /**
     * 委派调用Adaptee的sampleMethod1方法
     */
    public function sampleMethod1()
    {
        $this->_adaptee->sampleMethod1();
    }

    /**
     * 源类中没有sampleMethod2方法,在此补充
     */
    public function sampleMethod2()
    {
        echo 'Adapter sampleMethod2 <br />';
    }

}

$adaptee = new Adaptee();
$adapter = new Adapter($adaptee);
$one = $adapter->sampleMethod1();
var_dump($one);
$two = $adapter->sampleMethod2();
var_dump($two);

// Adaptee sampleMethod1
// D:\phpstudy\PHPTutorial\WWW\phpCollection\PHPDesignPattern\4.适配器.php:70:null
// Adapter sampleMethod2
// D:\phpstudy\PHPTutorial\WWW\phpCollection\PHPDesignPattern\4.适配器.php:72:null

https://www.cnblogs.com/DeanChopper/category/722751.html

https://www.cnblogs.com/moxiaoan/p/6230018.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值