美文网首页
PHP设计模式

PHP设计模式

作者: 水电梁师傅 | 来源:发表于2018-07-04 11:37 被阅读6次

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

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

    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,不过大体上还是很相似的

    相关文章

      网友评论

          本文标题:PHP设计模式

          本文链接:https://www.haomeiwen.com/subject/kzheuftx.html