热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php工厂方法模式,php工厂方法模式,抽象工厂模式和原型模式对比

php面向对象的开发过程中,不仅仅是把共同的方法抽象成类,还要对生成对象的策略有所了解工厂方法模式:一层层继承类,达到最终实

php面向对象的开发过程中,不仅仅是把共同的方法抽象成类,还要对生成对象的策略有所了解

工厂方法模式:一层层继承类,达到最终实现所有方法的目的

抽象工厂模式:最大化的把客类实现抽象化

原型模式:通过克隆的方法获取对象

说的很抽象,用代码说明吧,大家细细品味,欢迎大家指正

工厂方法模式:

//工厂方法模式

abstract class appEncoder{

abstract function encode();

}

class BlogAppEncoder extends appEncoder{

function encode(){

return "encode in Blog format\n";

}

}

class MegaAppEncoder extends appEncoder{

function encode(){

return "encode in Blog format\n";

}

}

abstract class CommsManager{

abstract function getHeader();

abstract function getAppEncoder();

abstract function getFooter();

}

class BlogCommsManager extends CommsManager{

function getHeader(){

return "BloggsCal header\n";

}

function getAppEncoder()

{

return new BlogAppEncoder();

}

function getFooter(){

return "Bloggscal footer\n";

}

}

class MegaCommsManager extends CommsManager{

function getHeader(){

return "MegaCal header\n";

}

function getAppEncoder()

{

return new MegaAppEncoder();

}

function getFooter(){

return "Megacal footer\n";

}

}

抽象工厂模式

abstract class CommsManager{

const APP = 1;

const TTD = 2;

const CONTRACT = 3;

abstract function getHeader();

abstract function make($flag_in);

abstract function getFooter();

}

class BlogCommsManager extends CommsManager{

function getHeader(){

return "blog header\n";

}

function make($flag_in){

switch($flag_in)

{

case self::APP:

return new BlogAppEncoder();

case self::TTD:

return new BlogTtdEncoder();

case self::CONTRACT:

return new BlogConEncoder();

}

return new BlogAppEncoder();

}

function getFooter(){

return "blog footer\n";

}

}

原型模式

//原型模式

class Sea{};

class EarthSea extends Sea{};

class MarSea extends Sea{};

class Plains{};

class EarthPlains extends Plains{};

class MarPlains extends Plains{};

class Foreast{};

class EarthForeast extends Foreast{};

class MarForeast extends Foreast{};

class TerrainFactory{

Private $sea;

Private $plains;

Private $Foreast;

function __construct(Sea $sea,Plains $plains, Foreast $foreast){

$this->sea = $sea;

$this->plains = $plains;

$this->foreast = $foreast;

}

function getSea()

{

return clone $this->sea;

}

function getPlains(){

return clone $this->plains;

}

function getForeast(){

return clone $this->foreast;

}

}

$factory = new TerrainFactory(new EarthSea(), new EarthPlains(), new EarthForeast());

print_r($factory->getSea());

print_r($factory->getPlains());

print_r($factory->getForeast());



推荐阅读
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 本文介绍了GregorianCalendar类的基本信息,包括它是Calendar的子类,提供了世界上大多数国家使用的标准日历系统。默认情况下,它对应格里高利日历创立时的日期,但可以通过调用setGregorianChange()方法来更改起始日期。同时,文中还提到了GregorianCalendar类为每个日历字段使用的默认值。 ... [详细]
  • 本文介绍了一种在PHP中对二维数组根据某个字段进行排序的方法,以年龄字段为例,按照倒序的方式进行排序,并给出了具体的代码实现。 ... [详细]
author-avatar
和乐大同2011_999
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有