php 抽象工厂模式

php 抽象工厂模式/*抽象工厂模式:用来生成一组相关或相互依赖的对象。抽象工厂模式与工厂方法模式的区别:抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。在编程中,通常一个产品结构,表现为一个接口或者抽象类,也就是说,工厂方法模式提供的所有产品都是衍生自同一个接口或抽

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

/*
抽象工厂模式:用来生成一组相关或相互依赖的对象。
抽象工厂模式与工厂方法模式的区别:
抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。
他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构;
而抽象工厂模式则是针对的多个产品等级结构。
在编程中,通常一个产品结构,表现为一个接口或者抽象类,
也就是说,工厂方法模式提供的所有产品都是衍生自同一个接口或抽象类,
而抽象工厂模式所提供的产品则是衍生自不同的接口或抽象类。在抽象工厂模式中,
有一个产品族的概念:所谓的产品族,是指位于不同产品等级结构中功能相关联的产品组成的家族。
抽象工厂模式所提供的一系列产品就组成一个产品族;而工厂方法提供的一系列产品称为一个等级结构。
我们依然拿生产汽车的例子来说明他们之间的区别。
 */


/**
 *汽车抽象类
 *@aothor li.yonghuan
 *@version 2014.01.13
 *
 */
abstract class vehicle{

    /**
     *属性
     *@var array
     */
    public $props = array();

    /**
     *设置属性
     *@param $key 属性名
     *@param $value 属性值
     */
    public function setProperty( $key, $value ){
       $this->props[$key] = $value; 
    }

    /**
     *获取属性值
     *@param $key
     *
     */
    public function getProperty( $key ){
       return $this->props[$key]; 
    }
    
}

/**
 *公交车抽象类
 *@author li.yonghuan
 *@version 2014.01.13
 */
abstract class bus extends vehicle {
   /**
    *形体大小:两个门,三个门
    *@var string
    *
    */ 
    public $shape;
    
    /**
     *设置形体
     *@param $value
     */
    public function setShape( $value ){
        $this->shape = $value;
    }

    /**
     *抽象方法
     *@param
     */
    abstract function run();


}

/**
 *小汽车抽象类
 *@author li.yonghuan
 *@version 2014.01.13
 *
 */
abstract class car extends vehicle{
    /**
     *两厢,三厢
     *@var string
     */    
    public $room;

    /**
     *设置属性值
     *@param $key 属性名
     *@param $value 属性值
     */
    public function setRoom( $value ){
       $this->room = $value; 
    }

    /**
     *获取属性值
     *
     */
    public function getRoom(){
        return $this->room;
    }

    /**
     *抽象方法
     *
     */
    abstract function run();
}

/**
 *抽象工厂类
 *
 */
abstract class factory{
    abstract static function create( $className );
}

/**
 *小汽车工厂类
 *@author li.yonghuan
 *@version 2014.01.13
 */
class carFactory extends factory {

    /**
     *实现工厂方法
     *@param $className 类名
     */
    public static function create( $className ){
        $class = $className;
        return new $class();
    }
}

/**
 *奥迪车
 *@author li.yonghuan
 *@version 2014.01.13
 */
class audi extends car{
    
    public function run(){

        parent::setProperty('brand','audi');
        $brand = parent::getProperty('brand');
        $this->setRoom('threeRoom');
       return $this->room.' '.$brand.' car is running'; 
    }
}

$car = carFactory::create('audi');
echo $car->run();

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/164365.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JAVASocket实现聊天室「建议收藏」

    JAVASocket实现聊天室「建议收藏」JAVASocket实现聊天室文章目录JAVASocket实现聊天室Sokcet是什么JAVASOCKET编程中的两个重要对象ServerSocket构造方法acceptbindcloseSocket构造方法getInputStream,getOutputStreamclose聊天室实现服务端实现客户端实现读线程实现写线程实现运行结果Sokcet是什么socket本质上是两个端点之间的通…

    2022年6月15日
    26
  • java多线程并发之旅-14-lock free queue 无锁队列[通俗易懂]

    java多线程并发之旅-14-lock free queue 无锁队列[通俗易懂]无锁队列能实现吗?上面说的加锁的环形队列,可以保证线程安全。但是加锁能不能去掉呢?答案是肯定的,请看下面的娓娓道来。i++是原子操作吗?i++和++i是原子操作吗?有一个很多人也许都不是很清楚的问题:i++或++i是一个原子操作吗?在上一节,其实已经提到了,在SMP(对称多处理器)上,即使是单条递减汇编指令,其原子性也是不能保证的。那么在单处理机系统中呢?在编译器对C/C++源代码…

    2022年7月19日
    16
  • SMTP服务器地址_接收邮件服务器和发送邮件服务器

    SMTP服务器地址_接收邮件服务器和发送邮件服务器网站smtp服务器内容精选换一换如果您需要使用创建的云服务器搭建一个对外展示的网站或者Web应用程序,请按以下步骤进行相关的配置操作。建站参考如果您使用的是公共镜像创建的云服务器,那么购买完成后可以参考以下建站指导完成完网站或应用程序的搭建。搭建WordPress博客平台,请参考部署WordPress博客系统搭建Discuz论坛平台,请参考搭建Discuz论坛网站。更云解析服务支持为域名快速添…

    2022年10月3日
    0
  • C# excel转换Json

    C# excel转换Json//如果要支持xlsx格式表格,请在本机电脑安装这个//http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/AccessDatabaseEngine.exe参考案例:https://www.cnblogs.com/fengxiang/p/3551621.html使用的时候记得…

    2022年6月11日
    51
  • microsoft azure是什么软件_识潮App苹果Store全国前五

    microsoft azure是什么软件_识潮App苹果Store全国前五系统文章:基础认识:WindowsAzure(三):结构WindowAzure(二):开发和发布一个Azure程序Azure(一):简介入门教程:WindowsAzure(四-7)::诊断功能WindowsAzure(四-6):WindowsAzureDrive–本

    2022年8月31日
    0
  • Oracle中的SQL分页查询原理和方法详解

    Oracle中的SQL分页查询原理和方法详解转载请注明出处:http://blog.csdn.net/anxpp/article/details/51534006,谢谢!  本文分析并介绍Oracle中的分页查找的方法。  Oracle中的表,除了我们建表时设计的各个字段,其实还有两个字段(此处只介绍2个),分别是ROWID(行标示符)和ROWNUM(行号),即使我们使用DESCRIBE命令查看表的结构,也是看不到这

    2022年6月26日
    28

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号