多例模式被公认为是反面模式[1],为了获得更好的可测试性和可维护性,请使用『依赖注入模式』。超链接待完善
目的[2]
多例模式是指存在一个类有多个相同实例,而且该实例都是该类本身。这个类叫做多例类。 多例模式的特点是:
- 多例类可以有多个实例。
- 多例类必须自己创建、管理自己的实例,并向外界提供自己的实例。
多例模式实际上就是单例模式的推广。
举例
- 2 个数据库连接器,比如一个是 MySQL ,另一个是 SQLite
- 多个记录器(一个用于记录调试消息,一个用于记录错误)
UML 图
★官方PHP高级学习交流社群「点击」管理整理了一些资料,BAT等一线大厂进阶知识体系备好(相关学习资料以及笔面试题)以及不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货
代码
{const INSTANCE_1 = '1';const INSTANCE_2 = '2';/*** @var 实例数组*/private static $instances = [];/*** 这里私有方法阻止用户随意的创建该对象实例*/private function __construct(){}public static function getInstance(string $instanceName): Multiton{if (!isset(self::$instances[$instanceName])) {self::$instances[$instanceName] = new self();}return self::$instances[$instanceName];}/*** 该私有对象阻止实例被克隆*/private function __clone(){}/*** 该私有方法阻止实例被序列化*/private function __wakeup(){}
}
八重樱:PHP 互联网架构师成长之路*「设计模式」终极指南zhuanlan.zhihu.com
八重樱:PHP 互联网架构师 50K 成长指南+行业问题解决总纲(持续更新)zhuanlan.zhihu.com
八重樱:面试10家公司,收获9个offer,2020年PHP 面试问题zhuanlan.zhihu.com
★如果喜欢我的文章,想与更多资深开发者一起交流学习的话,获取更多大厂面试相关技术咨询和指导,欢迎加入我们的群-点击此处(群号码856460874)。
参考
- ^在软件工程中,一个反面模式(Anti-pattern 或 Antipattern)指的是在实践中明显出现但又低效或是有待优化的设计模式,是用来解决问题的带有共同性的不良方法。它们已经经过研究并分类,以防止日后重蹈覆辙,并能在研发尚未投产的系统时辨认出来。 Andrew Koenig 在 1995 年造了 Anti-pattern 这个词,灵感来自于 GoF 的《设计模式》一书。而这本书则在软件领域引入了 “设计模式”(Design Pattern)的概念。三年后 Antipattern 因《AntiPatterns》这本书而获得普及,而它的使用也从软件设计领域扩展到了日常的社会互动中。按《AntiPatterns》作者的说法,可以用至少两个关键因素来把反面模式和不良习惯、错误的实践或糟糕的想法区分开来: 行动、过程和结构中的一些重复出现的乍一看是有益的,但最终得不偿失的模式 在实践中证明且可重复的清晰记录的重构方案 很多反面模式只相当于是错误、咆哮、不可解的问题、或是可能可以避免的糟糕的实践,它们的名字通常都是一些用反话构成的词语。有些时候陷阱(Pitfalls)或黑色模式(Dark Patterns)这些不正式的说法会被用来指代各类反复出现的糟糕的解决方法。因此,一些有争议的候选的反面模式不会被正式承认。
- ^内容不错的话希望大家支持鼓励下点个赞/喜欢,欢迎一起来交流;另外如果有什么问题和想看的内容可以在评论提出