工厂模式和观察者模式是面向对象编程中常用的两种设计模式。工厂模式用于创建对象,观察者模式用于实现对象之间的解耦,使得一个对象的状态变化可以通知其他相关对象。这两种设计模式在实际开发中具有广泛的应用,可以提高代码的可维护性和扩展性。
工厂模式的主要思想是通过一个工厂类来创建对象,隐藏具体的实例化过程。通过引入工厂模式,我们可以在不暴露对象创建细节的情况下,统一管理对象的创建。常见的工厂模式包括简单工厂、工厂方法和抽象工厂。
举例说明,假设我们有一个汽车制造工厂,根据不同的需求来制造不同型号的汽车。我们可以定义一个抽象的汽车工厂类,在其中定义一个制造汽车的方法。具体的汽车制造工厂可以继承抽象工厂类,并实现自己的制造方法。通过使用工厂模式,我们可以根据需求创建不同型号的汽车,而无需知道具体的制造细节。
//by www.qzphp.cn
class CarFactory {
public function createCar($type) {
switch ($type) {
case 'SUV': return new SUV();
case 'SportsCar': return new SportsCar();
default: throw new Exception("Unsupported car type");
}
}
}
class SUV {
public function __construct() {
echo "SUV created";
}
}
class SportsCar {
public function __construct() {
echo "Sports Car created";
}
}
$factory = new CarFactory();
$car = $factory->createCar('SUV');
观察者模式的主要思想是定义了一种一对多的依赖关系,一个目标对象(被观察者)可以有多个观察者,当目标对象的状态发生变化时,它的所有观察者都会得到通知。这种模式使得目标对象和观察者之间的解耦,使得目标对象可以独立地变化而不影响观察者。
举例说明,我们有一个天气预报系统,需要通知多个观察者,包括手机应用程序和电视台。我们可以定义一个抽象的目标类,其中包含添加观察者、删除观察者和通知观察者的方法。具体的目标类可以继承抽象类,并实现自己的通知方法。观察者可以实现一个接口,在接口中定义更新方法,在目标对象状态变化时进行处理。
//by www.qzphp.cn
interface Observer {
public function update($message);
}
abstract class Subject {
protected $observers;
public function __construct() {
$this->observers = array();
}
public function attach(Observer $observer) {
$this->observers[] = $observer;
}
public function detach(Observer $observer) {
$index = array_search($observer, $this->observers);
if ($index !== false) {
unset($this->observers[$index]);
}
}
public function notify($message) {
foreach ($this->observers as $observer) {
$observer->update($message);
}
}
}
class WeatherStation extends Subject {
private $weather;
public function getWeather() {
return $this->weather;
}
public function setWeather($weather) {
$this->weather = $weather;
$this->notify($weather);
}
}
class MobileApp implements Observer {
public function update($message) {
echo "Mobile App received weather update: " . $message;
}
}
class TVStation implements Observer {
public function update($message) {
echo "TV Station received weather update: " . $message;
}
}
$weatherStation = new WeatherStation();
$mobileApp = new MobileApp();
$tvStation = new TVStation();
$weatherStation->attach($mobileApp);
$weatherStation->attach($tvStation);
$weatherStation->setWeather("Sunny");
工厂模式和观察者模式是常见的设计模式,它们在实际开发中具有广泛的应用。工厂模式通过引入一个工厂类来统一管理对象的创建,隐藏了具体的实例化过程,提高了代码的可维护性和扩展性。而观察者模式使得目标对象和观察者之间解耦,目标对象的状态变化会自动通知观察者,实现了对象之间的解耦,提高了代码的灵活性。

