PHP设计模式-工厂模式
来源:互联网 发布:淘宝申请定向计划 编辑:程序博客网 时间:2024/06/06 00:58
PHP设计模式-工厂模式
可能一直都以为设计模式只是为Java架构师准备的,实际上,设计模式对于每个人都非常有用。为什么说它们在PHP应用程序中也非常有用?
接下来让我来解释这些问题。
设计模式不仅代表着更快开发健壮软件的有用方法,而且还提供了以友好的术语封装大型理念的方法。用较小的示例展示设计模式的价值与功用是非常困难的。这往往有些大材小用的意味,因为模式实际上是在大型代码库中发挥作用的。
既然已经了解了设计模式以及它们的有用之处,现在我们来看看PHP5的几种常用模式。
一、工厂模式(Factory Pattern)
工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。(JAVA中工厂模式分为:简单工厂模式、工厂方法模式、抽象工厂模式)
工厂就是负责生成对象的类或方法。工厂模式解决了当代码关注于抽象类型时如何创建对象实例的问题。
在最初的设计模式一书中,许多设计模式都鼓励使用松散耦合。如何理解这个概念?在项目开发中更改一个代码片段时,就会发生问题,而且往往认为完全不相关的部分也可能出现级联破坏。该问题在于紧密耦合。如果类之间有非常强的依赖性,那么这样的系统就很难维护,因为系统里的一个改动会引起一连串的相关改动。所以我们需要一组模式使这些类之间能够相互通信,但不希望它们紧密绑定在一起,以避免出现联锁反应(严格意义上讲是叫解耦)。
在大型系统中,许多代码依赖于少数几个关键类。需要更改这些类时,可能会出现困难。例如,假设您有一个从文件读取的User类,您希望将其更改为从数据库读取的其他类,但是,所有的代码都引用从文件读取的原始类,这时候,使用工厂模式会很方便。
举例说明:
<?php abstract class IUser { //抽象产品角色 abstract function getName(); } class User extends IUser { //具体产品角色 public function getName() { return 'Jack'; } } class UserFactory { //工厂类角色 static public function create() { return new User(); //返回实例 } } $uo = UserFactory::create(); echo $uo->getName();?>
在简单工厂模式中,一个工厂类处于对产品实例化调用的中心位置上,它决定哪一个产品类应当被实例化,如同一个交通警察站在来往的车辆流中,决定放行哪一个方向的车辆前行。
工厂模式的三种角色:
1.工厂角色(Creator):这是本模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。
2.抽象产品角色(Product):工厂模式所创建的所有对象的父类。它负责描述所有实例所共有的公共接口。(一般由接口或抽象类来实现)。
3.具体产品角色(Concrete Product):是工厂模式创建的目标,所有创建的对象都是充当这个角色的某个具体类的实例。(由一个具体类实现)
工厂模式的优缺点:
优点:
1. 简单实用
2. 利于软件体系结构优化
缺点:
1. 违反高内聚责任分配原则
2. 模块功能容易蔓延,不利于系统维护
有时此类模式在规模较小的环境中似乎有点大材小用,不过,最好还是学习这种扎实的编码形式,以便应用于任意规模的项目中。
- 【PHP设计模式】工厂模式
- php设计模式:工厂模式
- php设计模式 工厂模式
- PHP设计模式-工厂模式
- php设计模式-工厂模式
- PHP设计模式-工厂模式
- php设计模式:工厂模式,
- PHP设计模式---工厂模式
- PHP设计模式-工厂模式
- php设计模式-工厂模式
- php设计模式---工厂模式
- PHP设计模式---工厂模式
- PHP设计模式-工厂设计模式
- PHP 常见工厂设计模式
- PHP 常见工厂设计模式
- PHP 常见工厂设计模式
- PHP设计模式之工厂
- PHP设计模式系列 - 工厂模式
- Python 的第一个 hello world 程序!
- Android recyclerView网格布局上拉加载更多视图的设计
- 学会Git玩转Github笔记(一)——Github基本概念 & 仓库管理
- GetSystemDirectory
- Spark2.1.1<standalone模式下的FileNotFoundException>
- PHP设计模式-工厂模式
- FreeMarker的几个重要作用
- Oracle 启动过程
- Android 通过GET请求利用pull解析器获取XML格式数据在ListView控件显示
- 过滤字符串 判断字符 数字判断
- C++/MFC-静态链接库
- 淘淘商城系列——Spring与ActiveMQ的整合及用JmsTemplate发送消息
- Android中读写文件
- 死锁