简单工厂模式//公共接口interfacedb{functionconn();}//服务器端开发(不知道谁会调用)classdbsqliteimplementsdb{publicfunctionconn(){echo'connectedtosqlite';}}classdbmysql实现db{publicfunctionconn(){echo'connectedtomysql';}}classFactory{publicstaticfunctioncreatDB($type){if($type=='mysql'){returnnewdbmysql();}elseif($type=='sqlite'){返回新的dbsqlite();}else{thrownewException("错误数据库类型",1);}}}//客户端调用时,不知道工厂类对于几种类型的实例化,只需要传递$type参数$db=Factory::creatDB('mysql');$db->conn();工厂模式//公共接口interfacedb{functionconn();}interfaceFactory{functioncreateDB();}//服务器端开发(不知道谁会调用)classdbsqliteimplementsdb{publicfunctionconn(){echo'connectedtosqlite';}}类dbmysql实现db{publicfunctionconn(){echo'connectedtomysql';}}类mysqlFactory实现工厂{publicfunctioncreateDB(){返回n新的dbmysql();}}classsqliteFactoryimplementsFactory{publicfunctioncreateDB(){returnnewdbsqlite();}}//=====服务器端添加Oracle类//前面的代码不需要修改classdboracleimplementsdb{publicfunctionconn(){echo'connectedtooracle';}}classoracleFactoryimplementsFactory{publicfunctioncreateDB(){returnnewdboracle();}}//=====客户端启动====$fact=newmysqlFactory();$db=$fact->createDB();$db->conn();$fact=newsqliteFactory();$db=$fact->createDB();$db->conn();$fact=neworacleFactory();$db=$fact->createDB();$db->conn();//在面向对象的设计规则,重要的开闭原则——对修改是封闭的,对扩展是开放的。单例模式//第二步阻塞new操作classsigle{protectedstatic$ins=null;//如果在方法前加上final,则方法不能被覆盖。如果类前加上final,则不能继承finalprotectedfunction__contruct(){}publicstaticfunctiongetIns(){if(self::$ins===null){self::$ins=newself();返回自我::$ins;}//防止被克隆finalprotectedfunction__clone(){}}$s1=sigle::getIns();//$s2=clone$s1;$s2=sigle::getIns();if($s1===$s2){echo'同一个对象';}else{echo'不是同一个对象';}观察者模型classUserimplementsSplSubject{public$lognum;公共$爱好;受保护的$observers=null;公共函数__construct($hobby){$this->lognum=rand(1,10);$这个->爱好=$爱好;$this->observers=newSplObjectStorage();}publicfunctionlogin(){$this->notify();}publicfunctionattach(SplObserver$observer){$this->observers->attach($observer);}publicfunctiondetach(SplObserver$observer){$this->observers->detach($observer);}publicfunctionnotify(){$this->observers->rewind();while($this->observers->valid()){$observer=$this->observers->current();}$观察者->更新($this);$this->observers->next();}}}类安全实现SplObserver{publicfunctionupdate(SplSubject$subject){if($subject->lognum<3){echo'Thisisthe'.$subject->lognum.'安全登录';}else{echo'这是'.$subject->lognum.'登录,异常';}}}类广告实现SplObserver{publicfunctionupdate(SplSubject$subject){if($subject->hobby=='sports'){echo'basketball';}else{echo'好好学习';}}}//实施观察$user=newUser('sports');$user->attach(newsecurity());$user->attach(newad());$用户->登录();Decorator模式//Decorator模式在修改函数上做文章classbaseArt{protected$content;受保护的$art=null;公共函数__construct($content){$this->content=$content;}publicfunctiondecorator(){return$this->content;}}//编辑文章摘要类editorArtextendsbaseArt{publicfunction__construct(baseArt$art){$this->art=$art;$this->装饰器();}publicfunctiondecorator(){//return$this->art->content.='编辑总结';返回$this->content=$this->art->decorator()。'编辑总结';}}//SEO添加内容classSEOartextendsbaseArt{publicfunction__construct(baseArt$art){$this->art=$art;$this->装饰器();}publicfunctiondecorator(){返回$this->content=$this->art->decorator()。'搜索引擎优化关键字';}}//不管先编辑哪一个,顺序可以调换$x=newSEOart(neweditorArt(newbaseArt('EverydayUpward')));$y=neweditorArt(newSEOart(newbaseArt('每天')));echo$x->decorator();echo'
';echo$y->decorator();
