打算復(fù)習(xí)下設(shè)計模式进泼,就有了這個文集。
所謂設(shè)計模式纤虽,就是代碼編程里面的一種套路乳绕,解決某類問題形成的套路模式,就好比你去撩妹逼纸,啥都不會洋措,話不會說,也不知道接下來該怎么樣杰刽。而像情圣菠发,就會告訴你,撩妹贺嫂,應(yīng)該先弄到微信號滓鸠,然后請吃飯,再看電影第喳。這個流程大體上是固定而細(xì)節(jié)上又是靈活的糜俗。這就是套路。
java的設(shè)計模式和php的不太一樣曲饱,當(dāng)然悠抹,思想是一樣的,但是由于php很靈活扩淀,沒有多態(tài)的特性楔敌,所以很多java的設(shè)計模式?jīng)]法套,所以自己整理下驻谆。
如果是java卵凑,以下是常見多態(tài)例子思想庆聘。
一個簡單的函數(shù)調(diào)用,go函數(shù)傳入一個cat類的實例,go函數(shù)內(nèi)部調(diào)用了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函數(shù)也能調(diào)用狗類的run方法,理論上也可以值漫,但是會比較復(fù)雜,而且如果隨著類加入的越多织盼,要添加的go函數(shù)也會越多
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("狗在叫");
}
}
代碼量無限增多會導(dǎo)致代碼復(fù)雜度上升杨何,而且不好修改,所以我們希望有那么一種方式沥邻,可以在少量添加代碼的情況下危虱,又能根據(jù)new出來的實例去自動調(diào)用實例化類內(nèi)部的方法。我們可以是使用繼承的方式實現(xiàn)這種情況唐全,go函數(shù)的形參傳的是父類埃跷,子類則為實參,這樣邮利,就可以根據(jù)子類的具體的對象調(diào)用具體的函數(shù)弥雹。這種情況稱之為“父類的引用指向子類的對象”,
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是強類型的延届,他不得不使用這種方式進(jìn)行設(shè)計實現(xiàn)想要的結(jié)果剪勿,這種實現(xiàn)基本上貫穿了java的整個開發(fā)體系,所以java23種設(shè)計模式中方庭,很多都是涉及到這塊厕吉,那么,現(xiàn)在來看看php的械念。如果是php實現(xiàn)會怎么樣头朱?
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實現(xiàn)起來會更靈活,寫到這里只是想說java的設(shè)計模式不能照搬到php龄减,不過大體上還是很相似的