PHP中几种常见的常见开发模式式

创造世界上最简单的PHP开发模式
作者:用户
本文讲的是创造世界上最简单的PHP开发模式,
  php(做为现在的主流开发语言) 作为“最简单”的 Web 脚本语言, 在国内的市场越来越大,php(做为现在的主流开发语言)er 越来越多,但是感觉大多数人好像没有考虑到模式问题,什么样的设计模式才是最优的,才是最适合自己目前工作的
  php(做为现在的主流语言) 作为“最简单”的 Web 脚本语言, 在国内的市场越来越大,php(做为现在的主流开发语言)er 越来越多,但是感觉大多数人好像没有考虑到模式问题,什么样的设计模式才是最优的,才是最适合自己目前工作的,毕竟效率是最重要的(用省下的时间打游戏,多美啊...)。MVC 应该是首选,www.sourceforge.net 上有好多优秀的基于 MVC 的开源项目,大家可以冲过去研究研究。    前几天给自己公司网站改版,主要还是发布系统,老板说后台我想怎么设计就怎么设计,唯一的前提就是快。于是自己搭建了一个简单的发布系统的框架。如果单纯从文章发布系统上讲,基本上可以满足“中小型”企业网站的文章发布系统的要求,后台的总共的php(做为现在的主流开发语言)代码不超过800行,而且支持任意扩充和plugin功能。    废话不再说了,下面把我的架构讲一下,希望对您能有所帮助。    注意:在开始前,需要您下载一个模板处理工具类:“smarttemplate”,并了解一些模板的简单的使用。    我的测试环境:windows2k/apache(Unix平台最流行的WEB服务器平台)2/php(做为现在的主流开发语言)4.3.2/smarttemplate类库    先讲一下整个web站点的文件的分布,在后面的章节中将陆续创建并填充下面的目录和文件  我的服务器的web的根目录是 “C:/apache(Unix平台最流行的WEB服务器平台)2/htdocs/”  我在下面建立了一个文件夹“cmstest”作为我的网站的主文件夹  文件夹“cmstest”下面的子文件结构是:    /config.inc.php(做为现在的主流开发语言)  /list1.php(做为现在的主流开发语言)  /list2.php(做为现在的主流开发语言)  /new.php(做为现在的主流开发语言)  /add.php(做为现在的主流开发语言)  /view.php(做为现在的主流开发语言)  /page.js  /src/MySQL(和搭配之最佳组合)Util.php(做为现在的主流开发语言)  /src/ArticleUtil.php(做为现在的主流开发语言)  /src/CoreUtil.php(做为现在的主流开发语言)  /src/ParseTpl.php(做为现在的主流开发语言)  /src/lib/smarttemplate/*.* 这个目录用来存放smarttemplate的类库的  /smart/template/list1.htm  /smart/template/list2.htm  /smart/template/new.htm  /smart/template/add.htm  /smart/template/view.htm  /smart/cache/  /smart/temp/    设计步骤:  考虑自己公司的网站的特点和已经设计的模板的结构,总结要实现的功能,列出清单。  分析功能清单,把功能分类。每一类的功能都是有共同点的,可以通过相同的方法实现的。  根据功能,设计数据库的表结构  设计一个配置文件config.inc.php(做为现在的主流开发语言), 用来记录网站的一些基本的信息,包括数据库名........  为每一类功能设计数据库查询的接口函数,这样以后相似的操作只要调用这个接口就可以了。这样避免了以后可能发生的大量的代码重复的操作,也就达到了代码复用的目的。  定义自己对模板工具的包装函数,以后调用的时候就不用管模板工具的使用问题了,只有往自己的包装函数里面塞数就可以了。  基础函数已经ok了,开始轻松的页面实现和模板的处理了。    我们现在就开始设计一个简单的系统,看看我是怎么一步一步地实现一个“最简单的文章的发布系统”的,当然只是我模拟的一个简单的项目,实际中一个项目可能比这要复杂的多。    一、分析我的案例:  呵呵,这个客户项目好简单的啊,幸福ing..........    list1.php(做为现在的主流开发语言):有三个文章和一个按钮,“php(做为现在的主流开发语言)开发文章列表”“php(做为现在的主流开发语言)开发热点文章列表”“asp开发最新文章”“添加新文章”  list2.php(做为现在的主流开发语言):有2个文章列表“asp开发文章列表”“asp开发热点文章列表”  new.php(做为现在的主流开发语言):一个添加文章的表单的页面  add.php(做为现在的主流开发语言): 处理new.php(做为现在的主流开发语言)的表单的页面  view.php(做为现在的主流开发语言): 文章察看的页面    二、分析功能  “php(做为现在的主流开发语言)开发文章列表”“asp开发文章列表”-------按文章的发布顺序,倒序排列显示,每页显示5篇文章  “php(做为现在的主流开发语言)开发热点文章列表”“asp开发热点文章列表”-------按文章的点击察看次数排序显示文章,显示3篇文章  “asp开发最新文章”按文章的发布顺序,倒序排列显示,显示3篇文章  “添加新文章”------一个文章的发布功能, 包括文章标题/作者/内容
以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索开发
,以便于您获取更多的相关知识。
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率
40+云计算产品,6个月免费体验
稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一
云服务器9.9元/月,大学必备
云栖社区(yq.aliyun.com)为您免费提供相关信息,包括
,所有相关内容均不代表云栖社区的意见!总结php中16个设计模式
原创
1416
说明:该教程全部截选自实验楼教程【16个PHP设计模式详解】:主要介绍16个常用的设计模式的基础概念和技术要点,通过UML类图帮助理解设计模式中各个类之间的关联关系,针对每种设计模式都使用PHP完成了一个代码示例,让你跟随实例轻松入门设计模式。一、工厂模式工厂模式具体可分为三类模式:简单工厂模式,工厂方法模式,抽象工厂模式;1.简单工厂模式又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。角色:Factory类:负责创建具体产品的实例Product类:抽象产品类,定义产品子类的公共接口ConcreteProduct 类:具体产品类,实现Product父类的接口功能,也可添加自定义的功能UML类图:示例代码:&?php
//简单工厂模式
function __construct()
echo &I am Cat class &br&&;
function __construct()
echo &I am Dog class &br&&;
class Factory
public static function CreateAnimal($name){
if ($name == 'cat') {
return new Cat();
} elseif ($name == 'dog') {
return new Dog();
$cat = Factory::CreateAnimal('cat');
$dog = Factory::CreateAnimal('dog');简单工厂模式最大的优点在于实现对象的创建和对象的使用分离,将对象的创建交给专门的工厂类负责,但是其最大的缺点在于工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码,而且产品较多时,工厂方法代码将会非常复杂。2.工厂方法模式此模式中,通过定义一个抽象的核心工厂类,并定义创建产品对象的接口,创建具体产品实例的工作延迟到其工厂子类去完成。这样做的好处是核心类只关注工厂类的接口定义,而具体的产品实例交给具体的工厂子类去创建。当系统需要新增一个产品是,无需修改现有系统代码,只需要添加一个具体产品类和其对应的工厂子类,是系统的扩展性变得很好,符合面向对象编程的开闭原则;角色:Product:抽象产品类ConcreteProduct:具体产品类Factory:抽象工厂类ConcreteFactory:具体工厂类UML类图:示例代码:&?php
interface Animal{
public function run();
public function say();
class Cat implements Animal
public function run(){
echo &I ran slowly &br&&;
public function say(){
echo &I am Cat class &br&&;
class Dog implements Animal
public function run(){
echo &I'm running fast &br&&;
public function say(){
echo &I am Dog class &br&&;
abstract class Factory{
abstract static function createAnimal();
class CatFactory extends Factory
public static function createAnimal()
return new Cat();
class DogFactory extends Factory
public static function createAnimal()
return new Dog();
$cat = CatFactory::createAnimal();
$cat-&say();
$cat-&run();
$dog = DogFactory::createAnimal();
$dog-&say();
$dog-&run();工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了面向对象的多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做。这个核心类仅仅负责给出具体工厂必须实现的接口,而不负责产品类被实例化这种细节,这使得工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品。3.抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。此模式是对工厂方法模式的进一步扩展。在工厂方法模式中,一个具体的工厂负责生产一类具体的产品,即一对一的关系,但是,如果需要一个具体的工厂生产多种产品对象,那么就需要用到抽象工厂模式了。为了便于理解此模式,这里介绍两个概念:产品等级结构:产品等级结构即产品的继承结构,如一个抽象类是电视机,其子类有海尔电视机、海信电视机、TCL电视机,则抽象电视机与具体品牌的电视机之间构成了一个产品等级结构,抽象电视机是父类,而具体品牌的电视机是其子类。产品族 :在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品,如海尔电器工厂生产的海尔电视机、海尔电冰箱,海尔电视机位于电视机产品等级结构中,海尔电冰箱位于电冰箱产品等级结构中。角色:抽象工厂(AbstractFactory):担任这个角色的是抽象工厂模式的核心,是与应用系统的商业逻辑无关的。具体工厂(Factory):这个角色直接在客户端的调用下创建产品的实例,这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统商业逻辑紧密相关的。抽象产品(AbstractProduct):担任这个角色的类是抽象工厂模式所创建的对象的父类,或它们共同拥有的接口具体产品(Product):抽象工厂模式所创建的任何产品对象都是一个具体的产品类的实例。UML类图:示例代码:&?php
interface TV{
public function open();
public function use();
class HaierTv implements TV
public function open()
echo &Open Haier TV &br&&;
public function use()
echo &I'm watching TV &br&&;
interface PC{
public function work();
public function play();
class LenovoPc implements PC
public function work()
echo &I'm working on a Lenovo computer &br&&;
public function play()
echo &Lenovo computers can be used to play games &br&&;
abstract class Factory{
abstract public static function createPc();
abstract public static function createTv();
class ProductFactory extends Factory
public static function createTV()
return new HaierTv();
public static function createPc()
return new LenovoPc();
$newTv = ProductFactory::createTV();
$newTv-&open();
$newTv-&use();
$newPc = ProductFactory::createPc();
$newPc-&work();
$newPc-&play();二、建造者模式又名:生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。例如,一辆汽车由轮子,发动机以及其他零件组成,对于普通人而言,我们使用的只是一辆完整的车,这时,我们需要加入一个构造者,让他帮我们把这些组件按序组装成为一辆完整的车。角色:Builder:抽象构造者类,为创建一个Product对象的各个部件指定抽象接口。ConcreteBuilder:具体构造者类,实现Builder的接口以构造和装配该产品的各个部件。定义并明确它所创建的表示。提供一个检索产品的接口Director:指挥者,构造一个使用Builder接口的对象。Product:表示被构造的复杂对象。ConcreateBuilder创建该产品的内部表示并定义它的装配过程。包含定义组成部件的类,包括将这些部件装配成最终产品的接口。UML类图:示例代码:&?php
* chouxiang builer
abstract class Builder
protected $
abstract public function buildPartA();
abstract public function buildPartB();
abstract public function buildPartC();
abstract public function getResult();
class CarBuilder extends Builder
function __construct()
$this-&car = new Car();
public function buildPartA(){
$this-&car-&setPartA('发动机');
public function buildPartB(){
$this-&car-&setPartB('轮子');
public function buildPartC(){
$this-&car-&setPartC('其他零件');
public function getResult(){
return $this-&
protected $partA;
protected $partB;
protected $partC;
public function setPartA($str){
$this-&partA = $
public function setPartB($str){
$this-&partB = $
public function setPartC($str){
$this-&partC = $
public function show()
echo &这辆车由:&.$this-&partA.','.$this-&partB.',和'.$this-&partC.'组成';
class Director
public $myB
public function startBuild()
$this-&myBuilder-&buildPartA();
$this-&myBuilder-&buildPartB();
$this-&myBuilder-&buildPartC();
return $this-&myBuilder-&getResult();
public function setBuilder(Builder $builder)
$this-&myBuilder = $
$carBuilder = new CarBuilder();
$director = new Director();
$director-&setBuilder($carBuilder);
$newCar = $director-&startBuild();
$newCar-&show();三、单例模式单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。实现单例模式的思路是:一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称);当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用;同时我们还将该类的构造函数定义为私有方法,这样其他处的代码就无法通过调用该类的构造函数来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例。---维基百科单例模式的要点有:某个类只能有一个实例;它必须自行创建本身的实例;它必须自行向整个系统提供这个实例。单例模式是一种对象创建型模式。角色:Singleton:单例类UML 类图:示例代码:&?php
class Singleton
private static $
//私有构造方法,禁止使用new创建对象
private function __construct(){}
public static function getInstance(){
if (!isset(self::$instance)) {
self::$instance =
return self::$
//将克隆方法设为私有,禁止克隆对象
private function __clone(){}
public function say()
echo &这是用单例模式创建对象实例 &br&&;
public function operation()
echo &这里可以添加其他方法和操作 &br&&;
// $shiyanlou = new Singleton();
$shiyanlou = Singleton::getInstance();
$shiyanlou-&say();
$shiyanlou-&operation();
$newShiyanlou = Singleton::getInstance();
var_dump($shiyanlou === $newShiyanlou);上述的五个模式均属于创建型模式,关于结构型模式,点击【16个PHP设计模式详解】即可查看了……以上就是总结php中16个设计模式的详细内容,更多请关注php中文网其它相关文章!
江湖传言:PHP是世界上最好的编程语言。真的是这样吗?这个梗究竟是从哪来的?学会本课程,你就会明白了。
PHP中文网出品的PHP入门系统教学视频,完全从初学者的角度出发,绝不玩虚的,一切以实用、有用...
ThinkPHP是国内最流行的中文PHP开发框架,也是您Web项目的最佳选择。《php.cn独孤九贱(5)-ThinkPHP5视频教程》课程以ThinkPHP5最新版本为例,从最基本的框架常识开始,将...
本套教程,以一个真实的学校教学管理系统为案例,手把手教会您如何在一张白纸上,从零开始,一步一步的用ThinkPHP5框架快速开发出一个商业项目。
所有计算机语言的学习都要从基础开始,《PHP入门视频教程之一周学会PHP》不仅是PHP的基础部分更主要的是PHP语言的核心技术,是学习PHP必须掌握的内容,任何PHP项目的实现都离不开这部分的内容,通...
《php.cn原创html5视频教程》课程特色:php中文网原创幽默段子系列课程,以恶搞,段子为主题风格的php视频教程!轻松的教学风格,简短的教学模式,让同学们在不知不觉中,学会了HTML知识。
本课以最新版ThinkPHP5.0.10为基础进行开发,全程实录一个完整企业点,从后台到前台,从控制器到路由的全套完整教程,不论是你是新人,还是有一定开发经验的程序员,都可以从中学到实用的知识~~
ThinkPHP是一个快速、开源的轻量级国产PHP开发框架,是业内最流行的PHP框架之一。本课程以博客系统为例,讲述如何使用TP实战开发,从中学习Thinkphp的实践应用。模版下载地址:http:/...
本课程是php实战开发课程,以爱奇艺电影网站为蓝本从零开发一个自己的网站。目的是让大家了解真实项目的架构及开发过程
本课以一个极简的PHP开发框架为案例,向您展示了一个PHP框架应该具有的基本功能,以及具体的实现方法,让您快速对PHP开发框架的底层实现有一个清楚的认识,为以后学习其实的开发框架打下坚实的基础。
javascript是运行在浏览器上的脚本语言,连续多年,被评为全球最受欢迎的编程语言。是前端开发必备三大法器中,最具杀伤力。如果前端开发是降龙十八掌,好么javascript就是第18掌:亢龙有悔。...
本站9月直播课已经结束,本套教程是直播实录,没有报上名或者漏听学员福利来了,赶紧看看吧,说不定这里就有你的菜
轻松明快,简洁生动,让你快速走入HTML5的世界,体会语义化开发的魅力
JavaScript能够称得上是史上使用最广泛的编程语言,也是前端开发必须掌握的三技能之一:描述网页内容的HTML、描述网页样式的CSS以及描述网页行为的JavaScript。本章节将帮助大家迅速掌握...
《php用户注册登录系统》主要介绍网站的登录注册功能,我们会从最简单的实现登录注册功能开始,增加验证码,cookie验证等,丰富网站的登录注册功能
Bootstrap 是最受欢迎的 HTML、CSS 和 JS 框架,用于开发响应式布局、移动设备优先的 WEB 项目。为所有开发者、所有应用场景而设计,它让前端开发更快速、简单,所有开发者都能快速上手...
《PHP学生管理系统视频教程》主要给大家讲解了HTML,PHP,MySQL之间的相互协作,实现动态的网页显示和获取数据.
《php.cn独孤九贱(2)-css视频教程》课程特色:php中文网原创幽默段子系列课程,以恶搞,段子为主题风格的php视频教程!轻松的教学风格,简短的教学模式,让同学们在不知不觉中,学会了CSS知识...
《弹指间学会HTML视频教程》从最基本的概念开始讲起,步步深入,带领大家学习HTML,了解各种常用标签的意义以及基本用法,学习HTML知识为以后的学习打下基础
jQuery是一个快速、简洁的JavaScript框架。设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的...
《最新微信小程序开发视频教程》本节课程是由微趋道录制,讲述了如何申请一个微信小程序,以及开发中需要使用哪些工具,和需要注意哪些等。
PHP开发工程师
文章总浏览数点击这里,将文章分享到自己的动态
PHP设计模式:简单工厂模式
设计模式是对面向对象设计中反复出现的问题的解决方案。以下是《大道PHP:LAMP+Zend+开源框架整合开发与实战》第10章介绍的几种常用设计模式。包括:简单工厂模式、单元素模式、观察者模式、命令模式、策略模式以及MVC模式。一、简单工厂模式简单工厂模式(Simple Factory Pattern)又被称为静态工厂方法模式(Static Factory Method Pattern),具体指创建一个类似于工厂的类,通过对该类中成员方法的调用返回不同类型的对象。1、类图这里,抽象类Product定义了一个获取产品名称的成员方法getName(),Product抽象类的具体实现为之类ProductA和之类ProductB。工厂类ProductFactory 用来决定在什么时候创建并返回哪个产品类的实例化对象,使用时,只需把参数传递给其他成员的create()方法,就可以创建Product类的对象,无须考虑具体的生产细节。2、代码&?php
//抽象类Product
abstract&class&Product&{
&&abstract&function&getName();
//具体类ProductA
class&ProductA&extends&Product&{
&&public&function&getName()&{
&&&&echo&&I&am&ProductA&;
//具体类ProductB
class&ProductB&extends&Product&{
&&public&function&getName()&{
&&&&echo&&I&am&ProductB&;
//&工厂类ProductFactory
class&ProductFactory&{
&&static&function&create($name)&{
&&&&switch&($name)&{
&&&&&&case&&A&:
&&&&&&&&return&new&ProductA();
&&&&&&case&&B&:
&&&&&&&&return&new&ProductB();
$product=ProductFactory::create(&A&);
$product-&getName();
echo&&&br&/&&;
$product=ProductFactory::create(&B&);
$product-&getName();
若觉得本文不错,就分享一下吧!
评论加载中...
看过此文的用户,还看了以下文章
正在加载中
作者相关文章更好的构造开发模板 五种常见的PHP设计模式 - 站长之家(chinaz.com)
更好的构造开发模板 五种常见的PHP设计模式
这段代码要简单得多。它仅有一个接口 IUser 和一个实现此接口的 User 类。User 类有两个创建对象的静态方法。此关系可用图 2 中的 UML 表示。
&图2 IUser 接口和带有工厂方法的 user 类
在命令行中运行脚本产生的结果与清单 1 的结果相同,如下所示:
以下为引用的内容:
% php factory2.php
如上所述,有时此类模式在规模较小的环境中似乎有些大材小用。不过,最好还是学习这种扎实的编码形式,以便应用于任意规模的项目中。
单元素模式
某些应用程序资源是独占的,因为有且只有一个此类型的资源。例如,通过数据库句柄到数据库的连接是独占的。您希望在应用程序中共享数据库句柄,因为在保持连接打开或关闭时,它是一种开销,在获取单个页面的过程中更是如此。
单元素模式可以满足此要求。如果应用程序每次包含且仅包含一个对象,那么这个对象就是一个单元素(Singleton)。清单 3 中的代码显示了 PHP V5 中的一个数据库连接单元素。
清单 3. Singleton.php
以下为引用的内容:
require_once(&DB.php&);
class DatabaseConnection
public static function get()
{ static $db =
if ( $db == null )
$db = new DatabaseConnection();
private $_handle =
private function __construct()
{ $dsn = 'mysql://root:password@localhost/photos';
$this->_handle =& DB::Connect( $dsn, array() );PHP常用的三种设计模式
转载 &更新时间:日 11:19:02 & 作者:范特西的麦田
本文为大家介绍常用的三种php设计模式:单例模式、工厂模式、观察者模式,具有很好的参考价值,下面跟着小编一起来看下吧
一、首先来看,单例模式
所谓单例模式,即在应用程序中只会有这个类的一个实例存在。
通常单例模式用在仅允许数据库访问对象的实例中,从而防止打开多个数据库连接。
一个单例类应包括以下几点:
和普通类不同,单例类不能被直接实例化,只能是由自身实例化。因此,要获得这样的限制效果,构造函数必须标记为private。
要让单例类不被直接实例化而能起到作用,就必须为其提供这样的一个实例。因此,就必须要让单例类拥有一个能保存类的实例的私有静态成员变量和对应的一个能访问到实例的公共静态方法。
在PHP中,为防止对单例类对象的克隆来打破单例类的上述实现形式,通常还为基提供一个空的私有__clone()方法。
单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
单例模式是一种常见的设计模式,在计算机系统中,线程池、缓存、日志对象、对话框、打印机、数据库操作、显卡的驱动程序常被设计成单例。
单例模式分3种:懒汉式单例、饿汉式单例、登记式单例。
单例模式有以下3个特点:
1.只能有一个实例。
2.必须自行创建这个实例。
3.必须给其他对象提供这一实例。
那么为什么要使用PHP单例模式?
PHP一个主要应用场合就是应用程序与数据库打交道的场景,在一个应用中会存在大量的数据库操作,针对数据库句柄连接数据库的行为,使用单例模式可以避免大量的new操作。因为每一次new操作都会消耗系统和内存的资源。
在以往的项目开发中,没使用单例模式前的情况如下:未完....
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具

我要回帖

更多关于 常见的几种单例模式 的文章

 

随机推荐