学习PHP设计模式是提高自身开发能力并且更好地理解PHP语言的必修课程之一。PHP设计模式是一种利用模板设计的面向对象的编程风格,深度合理地利用面向对象技术,最大化地提高代码的可重用性和可扩展性。
抽象工厂模式是常见的设计模式之一,它可以使得对象的创建在运行时刻进行修改,从而更加灵活地适应更多的运行环境。下面就来简单介绍一下抽象工厂模式的实现,并通过代码示例来进一步说明:
什么是抽象工厂模式?
抽象工厂模式是一种创建型模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们的类。在抽象工厂模式中,由具体的工厂类来创建对应的对象,这样可以将客户端代码与具体的类的实现分离。
抽象工厂模式示例说明
下面通过一个简单的示例来说明如何实现抽象工厂模式。
首先,我们定义一个接口Shape
,具体实现Rectangle
和Circle
:
interface Shape {
public function draw();
}
class Rectangle implements Shape {
public function draw() {
echo "Rectangle::draw() method.\n";
}
}
class Circle implements Shape {
public function draw() {
echo "Circle::draw() method.\n";
}
}
然后,定义一个接口Color
,具体实现Red
和Blue
:
interface Color {
public function fill();
}
class Red implements Color {
public function fill() {
echo "Red::fill() method.\n";
}
}
class Blue implements Color {
public function fill() {
echo "Blue::fill() method.\n";
}
}
接着,我们实现一个抽象工厂接口AbstractFactory
:
interface AbstractFactory {
public function getShape($shape);
public function getColor($color);
}
具体实现ShapeFactroy
和ColorFactory
:
class ShapeFactory implements AbstractFactory {
public function getShape($shape) {
switch ($shape) {
case 'rectangle':
return new Rectangle();
case 'circle':
return new Circle();
default:
return null;
}
}
public function getColor($color) {
return null;
}
}
class ColorFactory implements AbstractFactory {
public function getShape($shape) {
return null;
}
public function getColor($color) {
switch ($color) {
case 'red':
return new Red();
case 'blue':
return new Blue();
default:
return null;
}
}
}
最后,我们在客户端代码中创建抽象工厂factory
:
$factory = new ShapeFactory();
$shape1 = $factory->getShape('rectangle');
$shape1->draw();
$shape2 = $factory->getShape('circle');
$shape2->draw();
$factory = new ColorFactory();
$color1 = $factory->getColor('red');
$color1->fill();
$color2 = $factory->getColor('blue');
$color2->fill();
输出结果:
Rectangle::draw() method.
Circle::draw() method.
Red::fill() method.
Blue::fill() method.
从上面的代码可以看出,我们使用抽象工厂模式来创建了一系列相关的对象,而客户端代码并没有与具体的类实现耦合,可以灵活地进行切换和扩展。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:学习php设计模式 php实现抽象工厂模式 - Python技术站