单例模式--工厂模式

单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的。
所有的单例模式至少拥有以下三种公共元素:
1. 它们必须拥有一个构造函数,并且必须被标记为private
2. 它们拥有一个保存类的实例的静态成员变量
3. 它们拥有一个访问这个实例的公共的静态方法
单例类不能再其它类中直接实例化,只能被其自身实例化。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。

例子:

复制代码
 1 class Single {
 2     private $name;//声明一个私有的实例变量  3 private function __construct(){//声明私有构造方法为了防止外部代码使用new来创建对象。  4  5  }  6  7 static public $instance;//声明一个静态变量(保存在类中唯一的一个实例)  8 static public function getinstance(){//声明一个getinstance()静态方法,用于检测是否有实例对象  9 if(!self::$instance) self::$instance = new self(); 10 return self::$instance; 11  } 12 13 public function setname($n){ $this->name = $n; } 14 public function getname(){ return $this->name; } 15 } 16 17 18 $oa = Single::getinstance(); 19 $ob = Single::getinstance(); 20 $oa->setname('hello world'); 21 $ob->setname('good morning'); 22 echo $oa->getname();//good morning 23 echo $ob->getname();//good morning
复制代码

工厂模式就是一种类,具有为您创建对象的某些方法,这样就可以使用工厂类创建对象,而不直接使用new。这样如果想更改创建的对象类型,只需更改该工厂即可。

例子:

复制代码
 1 class Factory {//创建一个基本的工厂类
 2 static public function fac($id){//创建一个返回对象实例的静态方法  3 if(1 == $id) return new A();  4 elseif(2==$id) return new B();  5 elseif(3==$id) return new C();  6 return new D();  7  }  8 }  9 10 interface FetchName {//创建一个接口 11 public function getname();// 12 } 13 14 class A implements FetchName{ 15 private $name = "AAAAA"; 16 public function getname(){ return $this->name; } 17 } 18 19 class C implements FetchName{ 20 private $name = "CCCCC"; 21 public function getname(){ return $this->name; } 22 } 23 class B implements FetchName{ 24 private $name = "BBBBB"; 25 public function getname(){ return $this->name; } 26 } 27 28 class D implements FetchName{ 29 private $name = "DDDDD"; 30 public function getname(){ return $this->name; } 31 } 32 33 34 $o = Factory::fac(6);//调用工厂类中的方法 35 if($o instanceof FetchName){ 36 echo $o->getname();//DDDDD 37 } 38 39 $p=Factory::fac(3); 40 echo $p->getname();//CCCCC
复制代码

转载于:https://www.cnblogs.com/gyrgyr/p/10873497.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277719.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac OS使用技巧十七:丰富多彩的花哨输入法

OSX Mavericks中的汉字输入功能,丝毫不逊色于windows,甚至提供了强大的手写输入功能和语音输入功能,并且发展到现在,已经有很多种第三方输入法支持Mac了。 一、基本的输入法首先说一下支持Mac的各种中文输入法,其实我觉…

语言-汉语:汉语

ylbtech-语言-汉语:汉语汉语,即汉族的传统语言,是中国通用语言,国际通用语言之一,属汉藏语系,与藏语、壮语、侗语、黎语、彝语、苗语、瑶语等都是亲属语言。汉语历史悠久,使用人数最多&#xff…

Duboo入门示例(Idea开发环境)

在学习Dubbo分布式框架时的官方入门例子,很有代表性。简单清晰。 有关Dubbo的概念、概述和简单的配置文件,可以看官方文档的简述 会很快对Duboo有个整体的概念。 准备工作: 下载示例,点击这里下载,建议用git管理。下载注册中心&am…

Mac OS使用技巧十八:Safari碉堡功能之一制作Widget

Safari的使用大家应该自己摸索就可以慢慢驾轻就熟,毕竟再高端也是个浏览器,从开始上网就要一直使用浏览器,Safari只是众多浏览器中的一个比较强大的罢了。下面给大家介绍一下Safari的一个碉堡隐藏功能!!!!(其实不算隐藏啦。。。在…

CentOS 6.5 部署WordPress

1、安装环境: #yum install httpd mysql-server php php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc -y 2、配置mysql初始化密码: #mysqladmin -u root password ********** 2.1、mysql新建一个wordpress的表: create database wordpress; 3、启动服…

BZOJ1562: [NOI2009]变换序列(二分图 匈牙利)

Description Input Output Sample Input 5 1 1 2 2 1Sample Output 1 2 4 0 3HINT 30%的数据中N≤50;60%的数据中N≤500;100%的数据中N≤10000。 Source 这题是二分图应该不难看出来。 对于原序列中的一个点,对应两个可匹配的点。 关键是怎么…

Mac OS使用技巧十九:Safari碉堡功能之二查看网页源码

因为大三下的时候选修了搜索技术,了解了网络上搜索引擎和网络爬虫的信息扒取的一些东西,后来我们做了一个比较水的东西,就是只扒取了几家较大的下载网站几十个软件的评分下载量等信息,当用户输入一个程序名称,我们会根…

python文件打包发布(引用的包也可以加进来),打包出错解决了,运行出错解决了...

一开始,我以为,打包本来就很容易,可是没有。。。。。 没想到打包还能遇到坑 T.T 打包步骤: 1、安装 pyinstaller (cmd) pip install pyinstaller 2、进入目标文件所在文件夹,右键在此打开cmd py…

虚拟机(Visual Machine)的云平台的自动伸缩扩容(auto-scaling)技术

云计算平台中允许客户依据应用的负载进行云计算资源的弹性动态伸缩(理想的情况是实现一个用多少付费多少的模型,最大限度地降低用户的运营成本) 在进行讨论之前,先对几个名词进行定义 1)客户:使用云服务的人…

Unity 3D学习笔记之一 界面介绍

因为学校的课程,本学期对Unity 3D有学习的要求,在博客中记录下自己的Unity学习之路(内容摘录自书本和视频,书本为Unity 4.x从入门到精通)一、Unity界面介绍首先进入Unity3D,在菜单栏,File中new …

Coding and Paper Letter(一)

2019独角兽企业重金招聘Python工程师标准>>> 最近发现需要在快速阅读背景下,对快餐式资源做整理与收集。以Coding(以Github)和Paper(自己看到的一些论文,论文一般主要看题目和摘要做些简单小结)…

MacBook刷机勘错篇

前一段时间突然发现自己的MacBook已经好久没有刷过系统了,10.9用着还好,但bootcamp装的win8.1越来越卡,越用越慢。想要重做一下双系统,后来就演变成了两个系统一起更新,再后来就演变成了一个惨案。因为自己一直也没有使…

Mac OS X 10.10更新及体验

前一阵子,更新了Mac OS 10.10 Yosemite,总体用起来感觉还是很不错的,是很值得升级,相对于10.9 Mavericks优化了不少东西。我之前写的使用教程有一些也就不适用了;比如更换Dashboard中的背景,10.10中Dashboa…

Mac OS X必备APP推荐之一

本篇博文要推荐一下装机必备的APP,因为电脑的使用需求因人而异,这里我根据我的见解和长时间的使用经验推荐一些我认为大家基本都用得到的APP,太过专业性质的我就不推荐了,当然我的推荐肯定会有疏漏和偏差的地方,还请熟…

2018-2019-2 20175235 实验四《Android开发基础》实验报告

实验目的 一、Android Studio的安装测试 二、Activity测试 三、UI测试 四、布局测试 五、事件处理测试 一.Android Stuidio的安装测试: 参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十四章: 参考http://www.cnblogs.com…

Mac OS X必备APP推荐之二

本篇接着上一篇APP推荐的博文,继续为大家推荐Mac下好用的APP。 一、首先推荐一款DaisyDisk,磁盘分析、清理工具。前面第一篇APP推荐中,我们推荐过APP和系统垃圾清理工具——Cleanmymac,这两个APP侧重有所不同。Cleanmymac主要清理…

Mac OSX使用VMware Fusion安装windows虚拟机教程

安装虚拟机之前,先要有两步准备工作。第一,安装并激活VMware Fusion,如果大家还没有下载VMware Fusion请参照上一篇博文,APP推荐之二,下载VMware Fusion并激活。第二,下载你想要安装的系统镜像。因为已经装…

java简介和开发环境搭建

因为本人的Java一直以来水平都不怎么样,大一的时候只考了60分。所以在临近毕业的时候,我选择了重修Java,这些天正在慢慢的回顾Java,会到博客里面记录一些Java的知识,不为有多少人来看,只希望自己有所收获。…

第六章 函数和宏定义实验(2)

C程序设计实验报告 实验项目: 1、利用复化梯形公式计算定积分 2、计算Ackerman函数 3、编写计算x的y次幂的递归函数getpower(int x,int y),并在主程序中实现输入输出 4、编写计算学生年龄的递归函数 5、编写递归函数实现Ackman函数 姓名:王锦…

将控件保存为图片

原文:将控件保存为图片将控件保存为图片 周银辉 这里分别提供win form 和 wpf 两种方式 对于.net 2.0 我们可以简单地利用 BitBlt 函数来实现,非常简单,代码如下: publicstaticclassControlToImageConverter { privateconstInt32 S…