-
1.原型模式与工厂模式作用类似,都是用来创建对象 2.与工厂模式的实现不同,原型模式是先创建好一个原型对象,然后通过clone原型对象来创建新的对象,这样就免去了类创建时重复的初始化操作 3.原型模式适用于大对象的创建,创建一个大对象需要很大的开销,如果每次new就会消耗很大,原型模式仅需内存拷贝即可查看全部
-
EventGenerator.php abstract class EventGenerator{ private $obserers = array(); function addObsever(Observer $observer){ $this->obserers[] = $observer; } function ontify(){ foreach ($this->obserers as $observer){ $observer->update(); } } } event.php namespace IMooc; class Event extends EventGenerator{ function trigger(){ echo "Event <br>"; $this->ontify(); } } Observer.php interface Observer{ function update($event_info = null); } Observer1.php class Observer1 implements Observer{ function update($event_info = null){ echo "逻辑1"; } } index.php $event = new \IMooc\Event(); $event->addObsever(new \IMooc\Observer1()); $event->trigger();查看全部
-
1.观察者模式,当一个对象状态发生改变时,依赖它的对象全部会收到通知,并自动更新 2.场景:一个时间发生后,要执行一连串更新操作.传统的编程方式,就是在时间的代码之后直接加入处理逻辑,当更新得逻辑增多之后,代码会变得难以维护.这种方式是耦合的,侵入式的,增加新的逻辑需要改变事件主题的代码 3.观察者模式实现了低耦合,非侵入式的通知与更新机制查看全部
-
static function getUser($id){ //注册器模式 $key = 'user_'.$id; $user = Register::get($key); if(!$user){ $user = new User($id); Register::set($key,$user); } return $user; } class Register{ protected static $objects; static function set($alias,$object){ self::$objects[$alias] = $object; } static function get($name){ return self::$objects[$name]; } function _unset($alias){ unset(self::$objects[$alias]); } }查看全部
-
在代码中实现数据对象映射模式,我们将实现一个ORM类,将复杂的SQL语句映射成对象属性的操作。 在代码中实现数据对象映射模式,我们将实现一个ORM类,将复杂的sql语句映射成对象属性的操作 结合使用数据对象映射模式,工厂模式,注册模式查看全部
-
UserStrategy.php策略的接口文件:约定策略的所有行为。 FemaleUserStrategy.php 实现接口的所有方法 MaleUserStrategy.php 分支逻辑if else,新增一个逻辑以后需要修改每一个if else的地方。使用策略模式以后,只需要增加一个策略类。 从硬编码到解耦的实现。 接口 interface Userstrategy{ function showAD(); function showCategory(); } 两个类 class FemaleUserstrategy implements Userstrategy{ function showAD(){ echo "2015新女装"; } function showCategory(){ echo "女装"; } } class MaleUserstrategy implements Userstrategy{ function showAD(){ echo "2015新男装"; } function showCategory(){ echo "男装"; } } index文件 class Page{ protected $strategy; function index(){ echo "AD:"; $this->strategy->showAD(); echo "<br>"; echo "Category:"; $this->strategy->showCategory(); echo "<br>"; } function setStrategy(IMooc\Userstrategy $strategy){ $this->strategy = $strategy; } } $page = new Page; if(isset($_GET['female'])){ $strategy = new \IMooc\FemaleUserstrategy(); }else{ $strategy = new \IMooc\MaleUserstrategy(); } $page->setStrategy($strategy); $page->index();查看全部
-
1.策略模式,将一组特定的行为和算法封装成类,以适应某些特定的上下文环境,这种模式就是策略模式。 2.实际应用举例,假如一个电商网站系统,针对男性女性用户要各自跳转到不同的商品类目,并且所有广告位展示不同的广告查看全部
-
新建一个IDatabase interface IDatabase{ function connect($host,$user,$password,$dbname); function query($sql); function close(); } Database下面的 mysql mysqli pdo namespace IMooc\Database; use IMooc\IDatabase; class Mysql implements IDatabase{ protected $conn; function connect($host, $user, $password, $dbname){ $conn = mysql_connect($host,$user,$password); mysql_db_name($dbname,$conn); $this->conn = $conn; } function query($sql){ $res = mysql_query($sql,$this->conn); return $res; } function close(){ mysql_close($this->conn); } } namespace IMooc\Database; use IMooc\IDatabase; class PDO implements IDatabase{ protected $conn; function connect($host,$user,$password,$dbname){ $conn = new \PDO("mysql:host=$host;dbname=$dbname",$user,$password); $this->conn = $conn; } function query($sql){ return $this->conn->query($sql); } function close(){ unset($this->conn); } }查看全部
-
1.适配器模式,可以将截然不同的函数接口封装成统一的API 2.实际应用举例,PHP数据库操作有mysql,mysqli,pdo三种,可以用适配器模式统一成一致。类似场景还有cache适配,将memcache,redis,file,apc等不同的缓存函数,统一成一致查看全部
-
注册器模式:Register.php,用来将一些对象注册到全局的注册树上,可以在任何地方访问。set():将对象隐射到全局树上,_unset():从树上移除。get():去注册到树上的对象 namespace IMooc; class Register{ protected static $objects; static function set($alias,$object){ self::$objects[$alias] = $object; } static function get($name){ return self::$objects[$name]; } function _unset($alias){ unset(self::$objects[$alias]); } } 在工厂模式写下 class Factory{ static function createDatabase(){ $db =Database::getInstance(); Register::set('db1', $db); return $db; } } 在index.php $db = IMooc\Factory::createDatabase(); $db1 = \IMooc\Register::get('db1'); var_dump($db); var_dump($db1);查看全部
-
class Database{ static protected $db; private function __construct(){ } static function getInstance(){ echo 111; if(self::$db){ return self::$db; }else{ self::$db = new self(); return self::$db; } } function where($where){ return $this; } function order($order){ return $this; } function limit($limit){ return $this; } } 数据库类getinstance实现单例模式 在index文件要实例化数据库写 $db = IMooc\Database::getInstance();查看全部
-
在工厂中写 class Factory{ static function createDatabase(){ $db = new Database(); return $db; } } 在index文件中写 $db = IMooc\Factory::createDatabase();查看全部
-
1.工厂模式:工厂方法或者类生成对象,而不是在代码中直接new 2.单例模式:使某个类的对象仅允许创建一个 3.注册模式:全局共享和交换对象查看全部
-
protected $array = array(); function __set($key,$value){ //如果给不存在的变量进行赋值 会自动调用__set var_dump(__METHOD__); $this->array['key'] = $value; } function __get($key){ //如果输出一个不存在的变量 会自动调用__get var_dump(__METHOD__); return $this->array['key']; } function __call($func,$param){ //如果使用一个不存在的方法,则会调用__call var_dump($func,$param); return "magic function __call"; } static function __callstatic($func,$param){ //如果使用一个不存在的方法,则会调用__call var_dump($func,$param); return "magic function __callstatic"; } function __toString(){ //输出一个对象的时候,会自动调用这个方法 return __CLASS__; } function __invoke($param){ //对象当成函数去用会回调__invoke()这个魔术方法。 var_dump($param); return "invoke"; } $obj = new IMooc\Object(); $obj->title = "hello"; echo $obj->title; echo $obj->test("hello",123); echo IMooc\Object::test("hello",123); echo "<br>"; echo $obj; echo "<br>"; echo $obj("test11111");查看全部
-
对象当成函数去用会回调__invoke()这个魔术方法。查看全部
举报
0/150
提交
取消