`
文章列表
结构类模式包括适配器模式、桥梁模式、组合模式、装饰模式、门面模式、享元模式和代理模式,它们都是通过组合类或对象产生更大结构以适应更高层次的逻辑需求。   一、代理模式VS装饰模式 代理模式把当前的行为或功 ...
创建类模式包括工厂方法模式、建造者模式、抽象工厂模式、单例模式和原型模式,它们都能够提供对象的创建和管理职责。其中的单例模式和原型模式非常容易理解,单例模式是要保持在内存中只有一个对象,原型模式是要求通过复制的方式产生一个新对象,这两个不容易混淆。下面主要分析其它三种模式。     一、工厂方法模式VS建造者模式   1、意图不同 在工厂方法模式里,关注的是一个产品整体,无须关心产品的各部分是如何创建出来的;但在建造者模式中,一个具体产品的产生是依赖各个部件的产生以及装配顺序,它关注的是“由零件一步一步地组装出产品对象”,简单地说,工厂模式是一个对象创建的粗线条应用,建造者模式则 ...
有一哥们是搞山寨货的,什么流行就搞什么。自己有个厂子,前些时间服装挣钱,就生产衣服,现在搞手机挣钱,搞手机,这哥们很聪明,就换了个产品,工人,厂房都不变。他是怎么做到的?用类图来模拟一下: 由类图可以看出这哥现有两家公司,一个搞房地产,一个搞山寨货(phone),房地产是长久渠道,山寨随时可能变更。 用PHP来实现: <?php abstract class Corp { private $product; public function __construct( Product $product ) { $this->product = $product ...
第一步:安装php xdebug扩展 参考http://www.xdebug.org/docs/install 讲的很详细,这里略过。   第二步:安装sublime xdebugclient(不是xdebug) 直接用package control安装即可   第三步:配置php xdebug扩展 windows: [XDebug] zend_extension = "D:\xampp\php\ext\php_xdebug.dll" xdebug.remote_autostart=1 xdebug.remote_enable = On xdeb ...
今天学习一个对php来说意义不大的模式——享元模式 竟然意义不大为什么要学?我一直认为设计模式是不针对语言的,相对于目前的php意义不大,并不表示其本身没有意义,其在编译型的语言里还是有很多的用处的。   享元模式的定义 享元模式是池技术的重要实现方式,其定义为:使用共享对象可有效地支持大量的细粒度的对象。太简单了,通俗地说就是把经常要使用到的对象共享起来,而不去从新创建而占用内存。其大致构成: 1、抽象享元(Flyweight)角色 此角色是所有的具体享元类的超类,为这些类规定出需要实现的公共接口。那些需要外蕴状态的操作可以通过调用商业以参数形式传入 2、具体享元(Concre ...
解释器模式的定义(现实项目中很少遇到,因此直接理论先。。。) 解释器模式是一种按照规定语法进行解析的方案,在现在项目中使用较少,其定义为:给定一门语言,定义它的方法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。其构成如下: 1、AbstractExpression——抽象解释器 具体的解释任务由各个实现类完成,具体的解释器分别由TerminalExpression和NonterminalExpression完成 2、TerminalExpression——终结符表达式 实现与方法中的元素相关联的解释操作,通过一个解释器模式中只有一个终结符表达式,但有多个实例,对 ...
现在写字楼越建越高,码农上个班不但要挤个地铁,还要挤个电梯。电梯的运行简单有这么几个状态:运行、停止、关闭、打开,电梯想要正常的运行,就必须得遵循一定的规则,例如运行的时候不能开门,开门状态不能运行。 ...
有一天,技术总监说要知道所有技术员工的工作情况,第二天,老板说要知道所有员工的业绩,再有一天,HR总监要知道所有员工的工资。每一次都是利用组合模式遍历出员工后获取员工的相关信息。也许你会说,直接把所有的信息全输出就行了,那估计你要被老板叼了,老板就想知道业绩,你把一个大表给看找,好吧,你可以回家了!让访问者模式来帮我们解决这个问题,类图如下: 可以看出,有个visitor,这就是访问者,貌似有点像代理的感觉。在讲代理模式就已经提到访问者模式本选购是在更特殊的场合采用了代理模式。实现代码: <?php interface IVisitor{ public function vis ...
今天学习一个比较少用的备份模式-----备忘录模式。通过名字应该都可以知道其作用了,就是对象或对象属性作备份,方便随便取回。拿打怪来说,开始我有100血,打着打着,剩20了,我想重玩,重新回到100血的状态。用备忘录 ...
今天说一个简单易懂的封装模式——门面模式。   <?php interface ILetterProcess{ public function writeContent( $content ); public function fileEnvelope( $address ); public function letterIntoEnvelope(); public function sendLetter(); } class LetterProcessImp implements ILetterProcess{ public function writ ...
登录系统想必大家都做过,验证用户名密码就登录成功,日志系统应该记录此次登录,如果登录出错,安全系统应该会记录此次错误,邮件系统也应该会发送相关邮件给管理员,等等。这就好像登录系统被很多人监视一样,一旦有什么风吹草动,立即会被其它系统获悉。那就用观察者模式来试试,类图如下: 很简单的模式,实现代码: <?php interface Observable{ function attach( Observer $observer ); function detach( Observer $observer ); function notify(); } class ...
一个公司是由每一个工作的成员组成,每一个成员有不同的属性(名字,职位,薪水),根据不同的等级,构成一个树形的结构。总经理是这个棵树的根节点,因为他没有上级,部门经理是树枝节点,因为他既有上级也有下级,小喽啰是叶节点,因为他是最底层的苦逼,没有下级。现用组合模式将这个树展示出来,类图: 代码如下: <?php abstract class Corp { private $name = ''; private $position = ''; private $salary = 0; public function __construct( $name, $positio ...
之前买过个ipad玩,当用其充电器充电时遇到了点麻烦(有的同学应该知道),家里没有适合它的插座。还好,卖家送了个接头转换部件,问题轻松解决。这就是适配器的作用。 <?php interface IUserInfo{ public function getUserName(); public function getUserId(); public function getUserInfo(); } class UserInfo implements IUserInfo{ public function getUserId() { return 123; ...
夏天来了,深圳的大小梅沙必将是人满为患,大家在游泳时还是要注意安全地。那如果真人有溺水了怎么办?有人会打120,有人会做人工呼吸(必须得是个美女才行),有人会用拳头叩击心前区急救。他们的做法都是对的,只是不同情况,不同的人会有不同的策略!既然这样,那就用策略模式来模拟下,类图如下: 由图可以看出,策略模式非常简单,直接上代码:   <?php interface IStrategy{ public function operator(); } class Call120 implements IStrategy{ public function operato ...
在天朝,没钱的孩子从小就得学好”数理化“,为的就是能考个好分数。但并不是每一个小孩都是读书的料,有的小孩就是没那个天赋,小的时候,记得每次考试后都要给家长报告,然后要签字,表示已经给家长看过了。小明就 ...
Global site tag (gtag.js) - Google Analytics