单例模式(Singleton)
目的在应用程序调用的时候,只能获得一个对象实例。 例子 数据库连接 日志 (多种不同用途的日志也可能会成为多例模式) 在应用中锁定文件 (系统中只存在一个 …)
目的在应用程序调用的时候,只能获得一个对象实例。 例子 数据库连接 日志 (多种不同用途的日志也可能会成为多例模式) 在应用中锁定文件 (系统中只存在一个 …)
目的相比正常创建一个对象 (new Foo () ),首先创建一个原型,然后克隆它会更节省开销。 示例大数据量 (例如:通过 ORM 模型一次性往数据库插入 1,000,000 条数据) 。
目的对象池模式是一种提前准备了一组已经初始化了的对象『池』而不是按需创建或者销毁的创建型设计模式。对象池的客户端会向对象池中请求一个对象,然后使用这个返回的对象执行相关操作。当客户端使用完毕,它将把这个特定类型的工厂对象返回给对象池,而不是销毁掉这个对象。 在初始化实例成本高,实例化率高,可用实例不足的情况下,对象池可以极大地提升性能。在创建对象(尤其是通过网络)时间花销不确定的情况下,通过对象池在可期时间内就可以获得所需的对象。 无论如何,对象池模式在需要耗时创建对象方面,例如创建数据库连接,套接字连接,线程和大型图形对象(比方字体或位图等),使用起来都是大有裨益的。在某些情况下,简单的对象池(无外部资源,只占内存)可能效率不高,甚至会有损性能。
目的用松散耦合的方式来更好的实现可测试、可维护和可扩展的代码。 依赖注入模式:依赖注入(Dependency Injection)是控制反转(Inversion of Control)的一种实现方式。要实现控制反转,通常的解决方案是将创建被调用者实例的工作交由 IoC 容器来完成,然后在调用者中注入被调用者(通过构造器 / 方法注入实现),这样我们就实现了调用者与被调用者的解耦,该过程被称为依赖注入。
目的多例模式是指存在一个类有多个相同实例,而且该实例都是该类本身。这个类叫做多例类。 多例模式的特点是: 多例类可以有多个实例。多例类必须自己创建、管理自己的实例,并向外界提供自己的实例。多例模式实际上就是单例模式的推广。 举例2 个数据库连接器,比如一个是 MySQL ,另一个是 SQLite多个记录器(一个用于记录调试消息,一个用于记录错误)
目的对比简单工厂模式的优点是,您可以将其子类用不同的方法来创建一个对象。 举一个简单的例子,这个抽象类可能只是一个接口。 这种模式是「真正」的设计模式, 因为他实现了 S.O.L.I.D 原则中「D」的 「依赖倒置」。 这意味着工厂方法模式取决于抽象类,而不是具体的类。 这是与简单工厂模式和静态工厂模式相比的优势。
目的简单工厂模式是一个精简版的工厂模式。 它与静态工厂模式最大的区别是它不是『静态』的。因为非静态,所以你可以拥有多个不同参数的工厂,你可以为其创建子类。甚至可以模拟(Mock)他,这对编写可测试的代码来讲至关重要。 这也是它比静态工厂模式受欢迎的原因!
目的建造者是创建一个复杂对象的一部分接口。 有时候,如果建造者对他所创建的东西拥有较好的知识储备,这个接口就可能成为一个有默认方法的抽象类(又称为适配器)。 如果对象有复杂的继承树,那么对于建造者来说,有一个复杂继承树也是符合逻辑的。 注意:建造者通常有一个「流式接口」,例如 PHPUnit 模拟生成器。 例子PHPUnit: 模拟生成器
目的在不指定具体类的情况下创建一系列相关或依赖对象。 通常创建的类都实现相同的接口。 抽象工厂的客户并不关心这些对象是如何创建的,它只是知道它们是如何一起运行的。
简介这是一组已知的 设计模式 和一些在 PHP 中实现它们的示例代码。 每个模式都有一个例子列表(其中大多数来自 Zend Framework,Symfony2 或 Doctrine2,因为我最熟悉这些软件)。 我认为设计模式方面的问题是人们通常知道他们,但不知道何时应用这些模式。