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

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

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

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. NOIP 2018 真・退役记

    目录 NOIp 2018 真・退役记 7.01 7.05 \(summary\) 7.12 7.18 7.26 - 7.27 8.2 8.3 8.3 8.7 8.9 8.20 8.24 8.27 8. ...

  2. 转来的--轻松自动化---selenium-webdriver(python) (七)---定位iframe——转来的

    本节知识点: 多层框架或窗口的定位: switch_to_frame() switch_to_window() 智能等待: implicitly_wait() 对于一个现代的web应用,经常会出现框架 ...

  3. Java基础学习总结(77)——Java枚举再总结

    在Java SE5之前,我们要使用枚举类型时,通常会使用static final 定义一组int常量来标识,代码如下 public static final int MAN = 0; public s ...

  4. 设置mysql5.7远程连接-----------https://blog.csdn.net/qiyueqinglian/article/details/52778230

    https://blog.csdn.net/qiyueqinglian/article/details/52778230 设置mysql5.7远程连接

  5. 2018.5.7每天一题面试题----final, finally, finalize 的区别

    1.final修饰符(关键字).被final修饰的类,就意味着不能再派生出新的子类,不能作为父类而被子类继承. 因此一个类不能既被abstract声明,又被final声明.将变量或方法声明为final ...

  6. [luoguP3052] [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper(DP)

    传送门 输出被阉割了. 只输出最少分的组数即可. f 数组为结构体 f[S].cnt 表示集合 S 最少的分组数 f[S].v 表示集合 S 最少分组数下当前组所用的最少容量 f[S] = min(f ...

  7. codevs3730 无线网络发射选址

    题目描述 Description 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的129条东西向街道和129条南北向街道所形 ...

  8. E - Super Jumping! Jumping! Jumping! DP

    Nowadays, a kind of chess game called “Super Jumping! Jumping! Jumping!” is very popular in HDU. May ...

  9. 武大OJ 622. Symmetrical

    Description          Cyy likes something symmetrical, and Han Move likes something circular. Han Mov ...

  10. maven 本地配置

    1.安装 配置环境变量 文件路径:C:\Program Files\apache-maven-3.3.9 2.本地文件配置 setting的配置 找到文件C:\Program Files\apache ...