facade 门面 php,php设计模式之门面(Facade)模式
該模式屬于結(jié)構(gòu)型模式
什么是門面模式?
定義:門面模式(有時候也稱為外觀模式)是指提供一個統(tǒng)一的接口去訪問多個子系統(tǒng)的多個不同的接口,它為子系統(tǒng)中的一組接口提供一個統(tǒng)一的高層接口。
外部與子系統(tǒng)的通信是通過一個門面(Facade)對象進行。
其實門面模式就是把幾個子系統(tǒng)(實例或者類.統(tǒng)一一個統(tǒng)一的接口進行執(zhí)行,客戶端不用關(guān)注子系統(tǒng),只用門面即可)
通俗的來說:將多個接口封裝為一個接口,比如調(diào)用A()方法,實則A()方法內(nèi)部進行了多次不同程度的封裝,我們不需要關(guān)心A()方法內(nèi)部的封裝有多復(fù)雜只需要調(diào)用A()方法來實現(xiàn)我們的目的即可。
話不多說上demo代碼://門面模式模擬:打開以及關(guān)閉照相機為例
//兩步:打開閃光燈、打開照相機
//?????關(guān)閉閃光燈、關(guān)閉照相機
//閃光燈類
class?Light
{
public?function?turnOn()
{
echo?'打開閃光燈
';
}
public?function?turnOff()
{
echo?'關(guān)閉閃光燈
';
}
}
//照相機類
class?Camera
{
public?function?active()
{
echo?'打開照相機
';
}
public?function?deactive()
{
echo?'關(guān)閉照相機
';
}
}
//按照傳統(tǒng)模式來實現(xiàn)照相?代碼肯定是如下這么寫的
/*
$light??=?new?Light();
$camera?=?new?Camera();
$light->turnOn();??//打開閃光燈
$camera->active();?//開始照相
*/
//以上這種方式不好,因為用戶需要調(diào)用2個接口才能完成工作,那我們能不能只讓用戶調(diào)用1一個接口就可以完成這個工作呢?
/*********偉大的分割線之門面(Facade)模式登場************/
//創(chuàng)建一個門面類
class?Facade
{
protected?$light;
protected?$camera;
public?function?__construct()
{
$this->light??=?new?Light();
$this->camera?=?new?Camera();
}
//照相的方法
public?function?start()
{
$this->light->turnOn();
$this->camera->active();
}
//關(guān)閉照相
public?function?stop()
{
$this->light->turnOff();
$this->camera->deactive();
}
}
//測試
$facade?=?new?Facade();
$facade->start();?//開始照相
echo?'
';
$facade->stop();?//關(guān)閉照相
/**
*經(jīng)過上面的門面模式這種方式的改造,我們再去照相的時候,對于用戶對于客戶端來說,使用的時候就非常方便了
*開始照相只需要調(diào)用一個start方法,關(guān)閉照相只需要調(diào)用一個stop方法
*/
優(yōu)點:
1、它對客戶屏蔽了子系統(tǒng)組件,因而減少了客戶處理的對象的數(shù)目并使得子系統(tǒng)使用起來更加方便。
2、實現(xiàn)了子系統(tǒng)與客戶之間的松耦合關(guān)系。
3、如果應(yīng)用需要,它并不限制它們使用子系統(tǒng)類。因此可以在系統(tǒng)易用性與能用性之間加以選擇。
適用場景:
1、為一些復(fù)雜的子系統(tǒng)提供一組接口。
2、提高子系統(tǒng)的獨立性。
3、在層次化結(jié)構(gòu)中,可以使用門面模式定義系統(tǒng)的每一層的接口。
總結(jié)
以上是生活随笔為你收集整理的facade 门面 php,php设计模式之门面(Facade)模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2023年4月13日子时取名张轩镒这个名
- 下一篇: pytorch:加载预训练模型(多卡加载