设计模式
来源:互联网 发布:淘宝购物车怎么置顶 编辑:程序博客网 时间:2024/06/05 22:59
1、多态的简单简单事例:
abstract class Tiger() {public abstract function climb();}class XTiger extends Tiger {public function climb() {echo "摔下来";}}class MTiger extends Tiger {public function climb() {echo "爬到树顶";}}class Client {public static function call(Tiger $animal) {$animal->climb();};}Client::call(new XTiger());Client::call(new MTiger());
interface:面向对象编程语言中接口操作的关键字,功能是把所需成员组合起来,用来装封一定功能的集合。
//共同接口interface db {function conn();}//服务端开发(不知道将会被谁调用)class dbmysql implements db{public function conn() {echo "连上MySQL";}}class dbsqlite implements db{public function conn() {echo "连接上sqlite";}}//==客户端看不见dbmysql,dbsqlite的内部细节的//只知道,上俩个类实现了db接口$db = new dbmysql();$db->conn();
//共同接口interface db {function conn();}//服务端开发(不知道将会被谁调用)class dbmysql {public function conn() {echo "连上MySQL";}}class dbsqlite {public function conn() {echo "连接上sqlite";}}class Factory {public static function createDB($type) {if ($type == "mysql") {return new dbmysql();} else if($type == "sqlite") { return new dbsqlite();} else {throw new Exception("Error db type", 1);}}}//==客户端现在不知道服务器有哪些类名//==只知道对方开放了一个Factory::createDB方法//方法允许传递数据库名$mysql = Factory::createDB("sqlite");$mysql->conn();
工厂与简单工厂相比较:更好、简单添加一个类型
4、工厂方法简单事例:
//共同接口interface db {function conn();}interface Factory {function createDB();}//服务端开发(不知道将会被谁调用)class dbmysql {public function conn() {echo "连上MySQL";}}class dbsqlite {public function conn() {echo "连接上sqlite";}}class mysqlFactory implements Factory {public function createDB() {return new dbmysql();}}class sqliteFactory implements Factory {public function createDB() {return new dbsqlite();}}//新增一个oracle类class dboracle {public function conn() {echo "连接上oracle";}}class oracleFactory implements Factory {public function createDB() {return new dboracle();}}//==客户端开始==$fact = new mysqlFactory();$mysql = $fact->createDB();$mysql->conn();
5、单例模式简单事例:
实现单例模式的思路:首先防止外部new操作,内部开放一个公共的接口提供new操作,最后是防止被覆盖和封锁克隆
class sigle {protected static $ins = null;public static function getIns() {if (self::$ins === null) {self::$ins = new self();}return self::$ins;} //方法前加final,则方法不能被覆盖;类前加final,则类不能被继承final protected function __construct() {}//封锁clonefinal protected function __clone() {}}$s1 = sigle::getIns();$s2 = sigle::getIns();if ($s1 === $s2) {echo "相等";} else {echo "不相等";}
6、观察者模式简单事例:
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>观察者模式</title><style>div {margin: 10px;width: 500px;height: 200px;border: 1px solid green;}</style></head><body><h1>用观察者模式来切换</h1><select name="" id=""><option value="male">男士风格</option><option value="female">女士风格</option></select><input type="button" value="观察学习" onclick="t1()"><input type="button" value="不观察学习" onclick="t2()"><div id="content">我是内容</div><div id="ad">我是广告</div><div id="study">学习</div></body><script>var sel = document.getElementsByTagName("select")[0]; sel.observers = {};sel.attach = function(key,obj) {this.observers[key] = obj;}sel.detach = function(key) {delete this.observers[key];}//当下拉框改变时,触发事件sel.onchange = sel.notify = function() {for(var key in this.observers) {this.observers[key].update(this);}}//客户端var content = document.getElementById('content');var ad = document.getElementById('ad');content.update = function(observee) {if (observee.value == "male") {this.style.backgroundColor = "gray";} else if(observee.value == "female") {this.style.backgroundColor = "pink";}}ad.update = function(observee) {if (observee.value == "male") {this.innerHTML = "汽车";} else if(observee.value == "female") {this.innerHTML = "减肥";}}var study = document.getElementById('study');study.update = function(observee) {if (observee.value == "male") {this.innerHTML = "学习计算机";} else if(observee.value == "female") {this.innerHTML = "学习美容";}}function t1() {sel.attach('study',study);}function t2() {sel.detach('study');}//监听select的变化sel.attach('content',content);sel.attach('ad',ad);</script></html>
0 0
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式~~~~~~~~~~
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 互联网协议入门
- HTTP Status 500 - Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your S
- Java设计模式之模板方法模式(Template Method)
- HTTP协议之基本认证
- POJ 1201 Intervals 差分约束系统
- 设计模式
- intent隐式调用的特点
- Java之验证码
- Qt中图像的显示与基本操作
- 找不到HttpServletRequest或者项目导入时报错:The import javax.servlet.http.HttpServletRequest cannot be resolved
- 23个适合Java开发者的大数据工具和框架
- 汇编指令速查
- 大数据竞赛平台——Kaggle 入门篇
- springmvc mybatis 事务管理不生效原因