爲了保護封裝,同時提供可訪問性,OOP設計建議使用獲取方法(getters)和設置方法(setters),也分別稱爲存取方法(accessors)和修該方法(mutators)。不建議直接訪問一個類,通過賦值來得到或修改屬性,這些工作完全可以有獲取方法/設置方法來完成。一般地,使用獲取設置方法必須適度;濫用會破壞封裝;
舉例說明:
<?php
/**
* Create by PhpStorm
* Author : wqzbxh
* Date : 2019/11/28
* time :22:10
*/
Class GetSet
{
private $dataWareHouse;
function __construct()
{
$this->setter(200);
$got = $this->getter();
echo $got;
}
private function getter()
{
return $this->dataWareHouse;
}
private function setter($setValue)
{
$this->dataWareHouse=$setValue;
}
}
$woker = new GetSet();
獲取/設置方法時私有的,所以這個訪問是封裝的,另外,在這實現中,設置方法放在類中,所以他當於一個數據容器。
對於面向對象系統中的數據處理,Allen Holub 曾給出以下建議:
不要直接請求完成一個工作所需要的信息,而應當請求擁有這個信息的對象爲你完成工作;
在GetSet類中的例子中,通過實例化類:
$woker = new GetSet();
就做到了這一點。他沒有暴漏實現細節。不過單獨看來GetSet類好像沒有太大用戶,因爲想要指定一個值,唯一的途徑就是在類中硬編碼實現。嘿嘿
從某種程度上來說,設計模式的目的時建立對象之間的通信鏈路,很多所謂的OOP並沒有正確的使用獲取設置方法,允許公開的訪問獲取方法和設置方法只會破壞封裝。
保持封裝時保持對象類之間的通信的過程時設計模式的一個工作。要找出一種方法來通信,同時不破壞封裝,這可能很困難(我我自己在很多實際開發中就是無限破壞,今後改正),,所以設計模式就相當於一種“祕訣”,可以指出如何使用可通信的類建立一個程序。