PHP设计模式

打算复习下设计模式,就有了这个文集。

所谓设计模式,就是代码编程里面的一种套路,解决某类问题形成的套路模式,就好比你去撩妹,啥都不会,话不会说,也不知道接下来该怎么样。而像情圣,就会告诉你,撩妹,应该先弄到微信号,然后请吃饭,再看电影。这个流程大体上是固定而细节上又是灵活的。这就是套路。

java的设计模式和php的不太一样,当然,思想是一样的,但是由于php很灵活,没有多态的特性,所以很多java的设计模式没法套,所以自己整理下。
如果是java,以下是常见多态例子思想。

一个简单的函数调用,go函数传入一个cat类的实例,go函数内部调用了cat类的run方法

public class Test {

    public static void main(String[] args) {        
        go(new Cat ());
    }

    
    public static void go(Cat cat)
    {
        cat.run();
    }
    
}

class Cat
{
    public void  run() 
    {
        System.out.println("猫在叫");
    }   
}

这个时候我们加入一个狗类,Dog类,希望go函数也能调用狗类的run方法,理论上也可以,但是会比较复杂,而且如果随着类加入的越多,要添加的go函数也会越多


public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        

        go(new Cat());
        go(new Dog());
    }

    
    public static void go(Cat cat)
    {
        cat.run();
    }
    public static void go(Dog dog)
    {
        dog.run();
    }   
}


class Cat
{
    public void  run() 
    {
        System.out.println("猫在叫");
    }   
}
class Dog 
{
    public void  run() 
    {
        System.out.println("狗在叫");
    }   
}

代码量无限增多会导致代码复杂度上升,而且不好修改,所以我们希望有那么一种方式,可以在少量添加代码的情况下,又能根据new出来的实例去自动调用实例化类内部的方法。我们可以是使用继承的方式实现这种情况,go函数的形参传的是父类,子类则为实参,这样,就可以根据子类的具体的对象调用具体的函数。这种情况称之为“父类的引用指向子类的对象”,


public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        go(new Animal());
        go(new Cat());
        go(new Dog());
    }

    
    public static void go(Animal animal)
    {
        animal.run();
    }
    
}

class Animal
{
    public void  run() 
    {
        System.out.println("动物在叫");
    }
}
class Cat extends Animal
{
    public void  run() 
    {
        System.out.println("猫在叫");
    }   
}
class Dog extends Animal
{
    public void  run() 
    {
        System.out.println("狗在叫");
    }   
}

这是java的情况,由于java是强类型的,他不得不使用这种方式进行设计实现想要的结果,这种实现基本上贯穿了java的整个开发体系,所以java23种设计模式中,很多都是涉及到这块,那么,现在来看看php的。如果是php实现会怎么样?


function go($animal)
{
    echo $animal->run();
}

go(new Dog());
echo '<br>';
go(new Cat());
class Animal
{
    public function run()
    {
        echo '动物在叫';
    }
}
class Cat
{
    public function run()
    {
        echo '猫在叫';
    }
}
class Dog
{
    public function run()
    {
        echo '狗在叫';
    }
}

可以看得出来php实现起来会更灵活,写到这里只是想说java的设计模式不能照搬到php,不过大体上还是很相似的

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 2017年12月26日 星期二 天气晴 今天发生了一件非常不愉快的事情。 上午的第二...
    Q儿阅读 191评论 0 1
  • 下课后,我惯常地坐在教室里发会儿呆,作会儿妖,毕竟这学期可就这么过去了。过了一会儿,一个早就走了的男孩子回来了,目...
    噗呲_3156阅读 134评论 0 0
  • 现在是公元2016年6月2日晚,听着Don't cry,走廊外夜色浓,想自己去校园里走走,却终究是被三年的管教约束...
    无飞飞阅读 276评论 1 0
  • 看到愉悦资本CEO Sam的blog,说的是年轻人如何思考未来的建议,对我很有启发,值得只字不差的阅读。 1. O...
    李长帅阅读 1,122评论 0 1

友情链接更多精彩内容