工厂模式提到的最多, 用途也最广. 简单说就是: 定义一个用户创建对象的接口.简单工厂模式:①抽象基类:类中定义抽象一些方法,用以在子类中实现②继承自抽象基类的子类:实现基类中的抽象方法③工厂类:用以实例化对象只要是可以根据不同的参数生成不同的类实例,那么就符合工厂模式的设计思想。//这样子做很方便扩展。我们在直接链接数据库的时候,不是使用代码new Mysql($host,$username,$password,$dbname)的形式//而可以动态生...
原文:http://www.cnblogs.com/Chenshuai7/p/5520965.html
复制代码 代码如下:<?php /** * 桥接模式 * * 将抽象部份与它实现部分分离,使用它们都可以有独立的变化 */ abstract class Implementor { abstract public function operation(); } class ConcreteImplementorA extends Implementor { public function operation() { echo "ConcreteImplementorA Operation<br/>"; } } class ConcreteImplementorB extends Implementor { public function operation() { echo "ConcreteImplementor...
1.说明1.适配器模式: 能够将截然不同的函数接口封装成统一的API2.实际应用举例,PHP的数据库操作有mysql, mysqli, pdo3种。能够用适配器模式统一成一致。相似的场景还有cache适配器,就是将memcache,redis,file,apc等不同的缓存函数统一成一致的 3.以下的样例能够帮助你对付各种数据库链接功能,mysql mysqli, pdo随便选,操作都抽象为统一的接口client不须要改动一行数据库链接方式2.创建一个接口interfaceIDatabase
{functi...
单例模式
只能有一个pulic 方法,对象只能被实例一次;
工厂模式
只需要接口类定义方法体,不同的类实现不同对象,工厂模式按需调用;
策略模式
算法模型 实现单独个体功能,按需计算;
观察者模式
当一个对象的状态发生改变时,依赖他的对象会全部收到通知,并自动更新;
定义观察者接口(实现观察者接口)
定义注册对象及通知接口
被观察者 实现注册观察者接口及通知原文:https://www.cnblogs.com/malhriji/p/14172422.html
代理,指的就是一个角色代表另一个角色采取行动,就象生活中,一个红酒厂商,是不会直接把红酒零售客户的,都是通过代理来完成他的销售业务。而客户,也不用为了喝红酒而到处找工厂,他只要找到厂商在当地的代理就行了,具体红酒工厂在那里,客户不用关心,代理会帮他处理。 代理模式,就是给某一对象提供代理对象,并由代理对象控制具体对象的引用。 代理模式涉及的角色: 抽象主题角色,声明了代理主题和真实主题的公共接口,使任...
命令类:1.命令角色:声明了一个给所有具体命令类的抽象接口。这是一个抽象角色。2.具体命令角色:定义一个接受者和行为之间的弱耦合;实现execute方法,负责调用接受的相应操作。execute()方法通常叫做执行方法3.客户角色:创建一个具体命令对象并确定其接受者。4.请求者角色:负责调用命令对象执行请求,相关的方法叫做行动方法。5.接受者角色:负责具体实施和执行一个请求。作用:1.抽象出待执行的动作以参数化对象。2.在不同的...
组合模式(Composite Pattern)有时候又叫做部分-整体模式,用于将对象组合成树形结构以表示“部分-整体”的层次关系。组合模式使得用户对单个对象和组合对象的使用具有一致性。常见使用场景:如树形菜单、文件夹菜单、部门组织架构图等。<?php
/*** *安全式合成模式*/
interface Component {public function getComposite(); //返回自己的实例public function operation();
}class Composite implements Component { // 树枝组件角...
什么是适配器:适配器设计模式只是将某个对象的接口适配为另一个对象所期望的接口。 设计情景:假如我们原始的有一个UserInfo的类,提供用户信息的类,早起设计该类的时候,只实现了一个getUserName获取用户名的方法。我们的MyOldObject类中,将从UserInfo这个类中获取用户信息,并且输出用户名随着时间的推移,我们旧的UserInfo这个类只提供的获取用户名的方法,已经没法满足需求,我们同时需要获取用户的年龄等信息。为了不改变原...
复制代码 代码如下:<?php /** * 观察者模式 * * 定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新 * 能够便利地创建查看目标对象状态的对象,并且提供与核心对象非耦合的指定功能 * 插件系统 */ class Observerable { private $_observers = array(); public function registerObserver($observer) { $this->_observers[] = $observer; } public function removeObserver(...
设计模式是技术面试的时候难免会被问到的一个问题,特别会让你举例说明各种设计模式的使用场景。使用设计模式可以减轻我们的工作量,优化我们的代码。设计模式非常的多,这里介绍单例模式,工厂模式,组合模式,策略模式4种模式/*** 单例模式* */class Config
{staticprivate $_instance = NULL;private $_settings = array();private function __construct(){}private function __clone(){};static function getInstance(){if(sel...
包装对象 扩展实例。interface IComponent
{function Display();
}class Person implements IComponent
{private$name;function __construct($name){$this->name = $name;}function Display(){echo "装扮的:{$this->name}<br/>";}
}class clothes implements IComponent
{protected$component;function Decorate(IComponent $component){$this->component = $component;}publicfunction Display(){if (!empty($this->component)) ...
PHPStorm IDE开发字体选用:Source Code Pro , Courier New , Concolasphp命名空间 :可以解决 不同类中 相同名字方法的冲突namespace test1;function test(){}自动载入 : function __autoload($class){ require __DIR__.‘/‘$class.‘.php‘;}spl_autoload_register(); 这个函数,可以允许多个 autoload 必须现在头一行例如 :spl_autoload_register(‘autoload1‘);spl_autoload_register(‘autoload2‘);funct...
<?php
header("Content-type:text/html;charset=utf-8");abstractclass msg{protected $send = null;public function __construct($send){$this->send = $send;}abstract function msg($content);function send($to, $content){$content = $this->msg($content);$this->send->send($to, $content);}
}/**
* 普通信
*/class ZnMsg
{public function send($to, $content){echo "给".$to."发送站内信:<br>".$content;}
}/**
* email...
概念介绍:工厂方法模式: 在学习工厂方法模式之前请首先阅读简单工厂模式工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中.工厂方法模式是简单工厂模式的进一步抽象和推广工厂方法模式的几个需要的对象:1、抽象工厂2、具体工厂:实现抽象工厂接口列出的方法,并且每个工厂对应各自的产品3、抽象产品4、具体产品 工厂方法模式里面的果园的例子,可以改写成工厂方法模式 , 大家可以自己实验。案例...