工厂模式:只要指定类名,就可以据此获取一个该类的对象。

单例模式:某个类,只允许其“创建”出一个对象。

单例的方法:三私一公(一个私有化对象,一个私有化构造方法,一个私有化克隆方法,一个公共方法返回对象)。

DBDA类的单例模式和完整功能:

 <?php
//$db = new mysqli('localhost:3306','root','','per_position');
echo '<meta charset="utf-8">';
class DBDA{
//定义数据库链接参数
public $host = 'localhost';
public $user = 'root';
public $pwd = '';
public $database = 'per_position';
public $charset = 'utf8'; //数据库连接对象
public $db = null;
//DBDA对象
private static $link = null; //禁止构造:初始化数据
private function __construct($configArr=array()){
$this->host = isset($configArr['host']) ? $configArr['host'] : 'localhost';
$this->user = isset($configArr['user']) ? $configArr['user'] : 'root';
$this->pwd = isset($configArr['pwd']) ? $configArr['pwd'] : '';
$this->database = isset($configArr['database']) ? $configArr['database'] : 'per_position';
$this->charset = isset($configArr['charset']) ? $configArr['charset'] : 'utf8';
//链接数据库
$this->connect();
}
//禁止克隆
private function __clone(){}
//提供公有方法返回对象
static function getDb($config=array()){
if(!isset(self::$link)){
self::$link = new self($config);
}
return self::$link;
}
//链接数据库的方法
function connect(){
$this->db = new mysqli($this->host,$this->user,$this->pwd,$this->database);
!mysqli_connect_error() or die('连接失败');
$this->db->query('set names '.$this->charset);
}
//执行sql语句的方法
function query($sql){
$res = $this->db->query($sql);
if(!$res){
echo ("<br />执行失败。");
echo "<br />失败的sql语句为:" . $sql;
echo "<br />出错信息为:" . mysqli_error($this->db);
echo "<br />错误代号为:" . mysqli_errno($this->db);
die();
}
return $res;
}
//返回二维数组
function getAll($sql){
$res = $this->query($sql);
return $res->fetch_all();
}
//返回字符串
function getStr($sql){
$res = $this->query($sql);
$arr = $res->fetch_all();
$str = '';
foreach($arr as $v){
foreach($v as $vv){
$str .= $vv.",";
}
$str = substr($str,0,-1);
$str .= "^";
}
$str = substr($str,0,-1);
return $str;
}
//返回json
function getJson($sql){
$res = $this->query($sql);
$arr = $res->fetch_all();
return json_encode($arr);
}
//返回关联数组
function getAssoc($sql){
$res = $this->query($sql);
$arr = array();
while($row = $res->fetch_assoc()){
$arr[$row['department']]=$row;
}
return $arr;
}
}
//$config = array(
// //'database' => 'mysql'
//);
//$DBDA = new DBDA();
//var_dump($DBDA->getJson('select * from user'));
//看错误提示
//$DBDA->query('select * from 123');
//$res = $DBDA->db->query('select * from user');
//var_dump($res->fetch_all()); //禁用了构造方法,直接new会报错。
//$DBDA = DBDA::getDb();
//var_dump($DBDA);
//echo "<br>";
//$DBDA = DBDA::getDb();
//var_dump($DBDA);

DBDA类的单例模式和完整功能

 <?php
include('DBDA.class.php');
$dbda = DBDA::getDb();
var_dump($dbda->getAll('select * from user'));

类的引用

0606-工厂模式、单例模式、DBDA的单例和完整功能的更多相关文章

  1. 瞎扯设计模式1:单例模式 饿汉模式 懒汉模式 线程安全的单例 singleton 设计模式 java

    [原创声明]此文为本人原创,欢迎转载,转载请注明出处,作者链接~ http://www.cnblogs.com/m-yb/p/8833085.html 单例很常用,面试也经常被问,如:不用自定义锁怎么 ...

  2. 10.Java设计模式 工厂模式,单例模式

    Java 之工厂方法和抽象工厂模式 1. 概念 工厂方法:一抽象产品类派生出多个具体产品类:一抽象工厂类派生出多个具体工厂类:每个具体工厂类只能创建一个具体产品类的实例. 即定义一个创建对象的接口(即 ...

  3. java设计模式—单例模式(包含单例的破坏)

    什么是单例模式? 保证一个了类仅有一个实例,并提供一个访问它的全局访问点. 单例模式的应用场景? 网站的计数器,一般也是采用单例模式实现,否则难以同步: Web应用的配置对象的读取,一般也应用单例模式 ...

  4. JavaScript设计模式之单例模式【惰性单例】

    在提高开发水平,往中高级前端工程师中,利用设计模式是必不可少的一条道路.掌握设计模式的思想远远比硬套重要,因为设计模式是一种思想,不局限于开发语言.但实际上由于语言的特性不同,往往在实现的时候会有不少 ...

  5. 02_javaSE面试题:单例设计模式

    还记得很多年前,面试就让在白板上写个单例模式,当时技术渣渣,还写的是class A.面试官还说,你就不能写个Singleton. 面试题 编程题:写一个Singleton示例 解析 什么是Single ...

  6. java基础10 单例模式之饿汉式和懒汉式单例

    前言: 软件行业中有23中设计模式 单例模式    模版模式    装饰者模式    观察者模式    工厂模式    ........... 单例模式 1. 单例模式包括 1.1 饿汉式单例 1.2 ...

  7. Java设计模式:Singleton(单例)模式

    概念定义 Singleton(单例)模式是指在程序运行期间, 某些类只实例化一次,创建一个全局唯一对象.因此,单例类只能有一个实例,且必须自己创建自己的这个唯一实例,并对外提供访问该实例的方式. 单例 ...

  8. 设计模式(java) 单例模式 单例类

    ·单例类 单实例类,就是这个类只能创建一个对象,保证了对象实例的唯一性. 1.单例模式( Singleton Pattern) 是一个比较简单的模式, 其定义如下:Ensure a class has ...

  9. 创建类模式(五):单例(Singleton)

    定义 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 单例模式一般情况下通过使用private的构造函数确保了在一个应用中只产生一个实例,并且是自行实例化. 和静态变量的区别 虽然 ...

随机推荐

  1. xmpp使用经验

    IM 标准协议有XMPP\IMPP\PRIM\SIP(SIMPLE)等,其中XMPP基于XML的协议,具备了很好的扩展性(依靠XML的域名空间)并且可以建立在TLS上使用SASL认证. 1.文件比如图 ...

  2. xmpp登录(2)

    XMPP中常用对象们: XMPPStream:xmpp基础服务类 XMPPRoster:好友列表类 XMPPRosterCoreDataStorage:好友列表(用户账号)在core data中的操作 ...

  3. git 的 基础操作及使用

    /* git svn版本控制器 */ /*git把文件对应的储存空间分为三个区: 1.工作区 2.缓存区 3.历史区 直接操作文件,不做add时,咱们是在工作区做的修改 右键 git bash her ...

  4. 题解 洛谷P3203/BZOJ2002【[HNOI2010]弹飞绵羊】

    裸的LCT,关键是要怎么连边,怎么将这种弹飞关系转化成连边就行了. 那么我们可以这样连边: 一个节点i的爸爸就是i+ki. 没有i+ki那么就被弹飞了,即\(i\)的爸爸是虚拟节点n+1. 那么怎么求 ...

  5. 面试总结——Java高级工程师(一)

    一.无笔试题 不知道是不是职位原因还是没遇到,面试时,都不需要做笔试题,而是填张个人信息表格,或者直接面试 二.三大框架方面问题 1.Spring 事务的隔离性,并说说每个隔离性的区别 解答:spri ...

  6. Centos6文本安装教程

    Centos6.4文本方式安装 虚拟机中文本安装(内存512),内存大于512默认为图形安装 1.选择安装媒体,在vbox中选skip跳过 2.选择安装语言(chinese(simplifired)简 ...

  7. AWK简单使用方法

    1. 命令格式 gawk [OPTIONS] 'program' FILES.... program:'PATTERN{ACTION}' 一条awk命令中,PATTERN和ACTION,至少存在一个才 ...

  8. Servlet过滤器的使用

    Servlet过滤器的使用 制作人:全心全意 Servlet过滤器:Servlet过滤器与Servlet十分相似,但它具有拦截客户端请求的功能,Servlet过滤器可以改变请求中的内容,来满足实际开发 ...

  9. 【模板】51nod 1051 最大子矩阵和

    [题解] 二重循环枚举起始列和终止列,竖着往下加,转化为一个最大子段和问题,逐行累加即可. #include<cstdio> #include<cstring> #includ ...

  10. String类的获取功能

    /* * String类的获取功能: * int length():获取字符串的长度,其实也就是字符个数 * char charAt(int index):获取指定索引处的字符 * int index ...