首页 > 其他 > 详细

设计模式一(抽象工厂模式)

时间:2019-05-26 00:22:07      阅读:141      评论:0      收藏:0      [点我收藏+]

1.抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

抽象多个工厂; 

技术分享图片

 

 

<?php
/*
interface是完全抽象的,只能声明方法,而且只能声明 public 的方法,不能声明 private 及 protected 的方法
不能定义方法体,也不能声明实例变量 。 interface 却可以声明常量变量 。
*/
interface Car
{
    const BIG=100; //
    public function getWidth(); //获取车宽度 不允许用private和protected修饰
    public function getHeight();//获取车高度
}

interface Colors
{
    public function setColor($c);
    public function getColor();
}
/**
抽象工厂类的定义;必须实现车和颜色的interface接口
1.抽象类是和抽象方法
2.抽象类不能被直接实例化即new;抽象类中只定义(或部分实现)子类需要的方法。
子类可以通过继承抽象类并通过实现抽象类中的所有抽象方法,使抽象类具体化。
3.子类必须实现抽象类利所有抽象方法
4.抽象方法只能用public 和protected修饰
**/
abstract class AbstractFactory implements Car,Colors
{
    //获取车的属性
    abstract public function getWidth();
    abstract public function getHeight();
    
    //获取车颜色
    abstract public function setColor($c);
    abstract public function getColor();
    public function getName(){
        return 宝马;
    }
}
/*
子类必须实现父类的抽象方法和接口的方法
*/
class CarFactory extends AbstractFactory
{
    protected $car_color;
    protected $h;
    protected $w;
    public function getWidth()
    {
        return 1000;
    }
    public function getHeight()
    {
        return 200;
    }
    public function setColor($c){
        
    }
    public function getColor(){
        return null;
    }
}

/*
子类必须实现父类的抽象方法和接口的方法
*/
class ColorFactory extends AbstractFactory
{
    protected $car_color;
    protected $h;
    protected $w;
    public function getWidth()
    {
        return null;
    }
    public function getHeight()
    {
        return null;
    }
    public function setColor($c){
        $this->car_color = $c;
    }
    public function getColor(){
        return $this->car_color;
    }
}

//实现生产车的类
class ProductCar 
{
    public static function getFactory($type){
        if($type==car){
            return new CarFactory();
        }elseif($type==color){
            return new ColorFactory();
        }
    }
}

//开始使用
//获取车属性
$fac_car = ProductCar::getFactory(car);
echo $fac_car->getWidth();

//后去颜色属性
$fac_color = ProductCar::getFactory(color);
$fac_color->setColor(红色);
echo $fac_color->getColor();


?>

 

设计模式一(抽象工厂模式)

原文:https://www.cnblogs.com/wanglijun/p/10924650.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!