設(shè)計(jì)模式就是: 典型場(chǎng)景的典型解決方案响蓉。就像是象棋中的:當(dāng)頭炮馬來跳烁设,這也是象棋中的設(shè)計(jì)模式檬某。
開閉原則: 規(guī)定“軟件中的對(duì)象(類撬腾,模塊,函數(shù)等等)應(yīng)該對(duì)于擴(kuò)展是開放的恢恼,但是對(duì)于修改是封閉的”时鸵,這意味著一個(gè)實(shí)體是允許在不改變它的源代碼的前提下變更它的行為。
- 工廠模式:
<?php
interface Animal{
public function run();
}
class Cat implements Animal
{
public function run(){
echo "I ran slowly <br>";
}
}
class Dog implements Animal
{
public function run(){
echo "I'm running fast <br>";
}
}
abstract class Factory{
abstract static function createAnimal();
}
class CatFactory extends Factory
{
public static function createAnimal()
{
return new Cat();
}
}
class DogFactory extends Factory
{
public static function createAnimal()
{
return new Dog();
}
}
$cat = CatFactory::createAnimal();
$cat->run();
$dog = DogFactory::createAnimal();
$dog->run();
// 如果我們?cè)谙胪卣雇米宇惖刃畔ⅲ?就不需要?jiǎng)又暗拇a邏輯
class Rabbit implements Animal
{
// 實(shí)現(xiàn)動(dòng)物接口中的run方法
public function run(){
echo 'im run very very fast';
}
}
// 聲明兔子工廠類 繼承抽象工廠類
class RabbitFactory extends Factory
{
public static function createAnimal()
{
return new Rabbit();
}
}
$rabbit = RabbitFactory::createAnimal();
echo $rabbit->run();
- 單例模式:
最經(jīng)典的案例就是開發(fā)程序的時(shí)候厅瞎,往往要操作很多次數(shù)據(jù)庫(kù)饰潜,根據(jù)數(shù)據(jù)庫(kù)句柄鏈接數(shù)據(jù)庫(kù)的行為,使用單例模式可以大大減少 new 的操作和簸。因?yàn)槊看?new 操作都會(huì)消耗大量的系統(tǒng)資源彭雾。
<?php
class Mysql
{
// 私有化成員屬性 保存實(shí)例
private static $instance;
// 私有化構(gòu)造函數(shù),防止創(chuàng)建對(duì)象锁保,也就是防止 new
private function __construct()
{
mysqli_connect($this->db_host,$this->db_user,$this->db_pwd) or die("Could not Connect MySql Server");
}
// 私有化克隆方法 防止對(duì)象被賦值
private function __clone()
{
}
// 開放一個(gè)公共方法 來創(chuàng)建對(duì)象
public static function getInstance()
{
//判斷此成員屬性是否是該類的實(shí)例薯酝。
if(!(self::$instance instanceof self)){
self::$instance = new self;
}
return self::$instance;
}
}