设计模式是由建筑学中间抽象出来的思想形成的,基于面向对象的设计思想和大量工程实践而成型。设计模式在众多语言中都是相通的,但是有些语言因为本身实际思想的缺陷会有很多的设计模式,但在弱类型语言比如php和python我们经常使用的设计模式屈指可数。多态在设计模式中占有重要地位,今天来说一说。
首先我们创建一个父类接口,我们总是面向接口编程,我们只需要看接口就知道有哪些方法可用,而不需要去阅读分析每一个对象(类)。我们定义关于猫科动物能不能爬树的抽象方法。
<?php
interface Felidae{
public function Climbing();
}
各种有趣的动物。
/* 东北虎体型很大,并不会爬树 */
class Xtriger implements Felidae{
public function Climbing(){
echo "能爬到一米,就掉下来了。";
}
}
/* 孟加拉虎身材娇小,所以能到树顶端 */
class Mtriger implements Felidae{
public function Climbing(){
echo "孟加拉虎爬到了树的顶端,然后下来了。";
}
}
/* 猫上窜下跳,直接飞起来了 */
class Cat implements Felidae{
public function Climbing(){
echo "直接飞起来了。";
}
}
在面向对象编程是有类似于客户端这样的概念的。所以我们创建一个客户端。要注意的是在方法括号里用了一个前面定义的Felidae类名。可能有些人没有见过,他的作用就是确定只有Felidae和他的子类能被当作参数被传递,相当于强类型中的类型控制。
class Client{
public static function show(Felidae $obj){
$obj->Climbing();
}
}
我们最后调用一下这些对象。
Client::show(new Cat());
echo "<br/>";
Client::show(new Xtriger());
echo "<br/>";
Client::show(new Mtriger());
最后显示的结果
直接飞起来了。
能爬到一米,就掉下来了。
孟加拉虎爬到了树的顶端,然后下来了。