
设计模式
文章平均质量分 52
enlyhua
这个作者很懒,什么都没留下…
展开
-
2. assertion 断言
assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。 在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。一般来说, assertion用于保证程序最基本、关键的正确性。assertion原创 2015-04-01 23:35:37 · 796 阅读 · 0 评论 -
8.观察者模式
index.php<?phpdefine('BASEDIR',__DIR__);include BASEDIR . '/IMooc/Loader.php';spl_autoload_register('\\IMooc\\Loader::autoload');class Event extends \IMooc\EventGenerator{ //表示触发了一个事件 public翻译 2016-03-05 22:59:53 · 384 阅读 · 0 评论 -
9.原型模式
原始方法:index.phpdefine('BASEDIR',__DIR__);include BASEDIR . '/IMooc/Loader.php';spl_autoload_register('\\IMooc\\Loader::autoload');$canvas1 = new IMooc\Canvas();$canvas1->init();//镂空$canvas1->rect(3翻译 2016-03-05 23:24:06 · 786 阅读 · 0 评论 -
10.装饰器模式
传统方法://传统方法,继承并重写class Canvas2 extends IMooc\Canvas{ public function draw() { echo "<div style='color:red;'>"; parent::draw(); echo "</div>"; }}$canvas1 = new Can翻译 2016-03-05 23:56:16 · 434 阅读 · 0 评论 -
11. 迭代器模式
index.php<?phpdefine('BASEDIR',__DIR__);include BASEDIR . '/IMooc/Loader.php';spl_autoload_register('\\IMooc\\Loader::autoload');$users = new IMooc\AllUser();foreach($users as $user){ var_dump($u翻译 2016-03-06 22:36:40 · 322 阅读 · 0 评论 -
14. MVC
1.MVC翻译 2016-03-07 22:07:24 · 333 阅读 · 0 评论 -
1. PHP 设计模式---工厂模式
基本设计模式 1.工厂模式//如果很多页面都 new 一个Database 对象,那么一旦Database作出改动,则需要在多个页面进行相应的改动。而用工厂模式,只需要改动一个地方。<?phpnamespace IMooc;class Factory{ static function createDatabase() { $db = new Database()翻译 2016-02-21 17:39:23 · 457 阅读 · 0 评论 -
13.面向对象设计基本原则
1.一个类只做一件事情,不要使用一个类完成很复杂的功能。而是拆分成更小,更具体的类。2.一个类在实现之后,应该对扩展开发,对修改封闭。3.如果有A,B两个类。假如A 依赖B,不应该在A 中直接调用 B类,而是应该使用依赖注入的方式,通过注入,将B类对象注入给A 类。这样B 对于 A来说,就是可以替换的。如果现在有另外的类C 提供了和B一样的接口,就可以在C 和 B之间进行切换。4.数据参数,和常量应翻译 2016-03-06 23:12:30 · 385 阅读 · 0 评论 -
2. 3种工厂模式
1.简单工厂模式(Simple Factory) <?php//抽象产品角色interface Car{ public function drive();}//具体产品角色class Benz implements Car{ public function __construct() { echo 'Benz <br/>'; }翻译 2016-02-21 21:40:20 · 460 阅读 · 0 评论 -
12. 代理模式
//传统方法$db = IMooc\Factory::getDatabase('slave');$info = $db->query('select name from user where id=1 limit 1');$db1 = IMooc\Factory::getDatabase('master');$info = $db->query("update user name='lili'翻译 2016-03-06 22:58:20 · 437 阅读 · 0 评论 -
3.单例模式
<?phpnamespace IMooc;class Database{ protected static $db; //第一步,单例模式,构造方法为私有的 private function __construct() { } //第二步,获取实例 public static function getInstance() {翻译 2016-02-23 23:14:01 · 363 阅读 · 0 评论 -
4.php 注册树模式
Register.php<?phpnamespace IMooc;class Register{ protected static $objects; //set 表示将一个对象注册到全局的注册树上 static function set($alias,$object) { self::$objects[$alias] = $object;翻译 2016-02-27 22:05:33 · 523 阅读 · 0 评论 -
15.自动加载配置
自动加载配置 Config.php<?phpnamespace IMooc;class Config implements \ArrayAccess{ //$path,配置文件所在的目录 protected $path; //$configs,用来保存已经加载过的配置 protected $configs = array(); function __cons翻译 2016-03-07 22:09:37 · 428 阅读 · 0 评论 -
16. 在工厂方法中读取配置,生成可配置化的对象
在工厂方法中读取配置,生成可配置化的对象翻译 2016-03-12 21:05:00 · 492 阅读 · 0 评论 -
7.数据对象映射模式
比如, new 一个对象,然后设置一些属性,就和数据库中表的一条记录对应起来。创建表:create table user( id int(11) primary key auto_increment, name varchar(32) not null, mobile varchar(11) not null, regtime timestamp);index.p翻译 2016-03-05 22:07:37 · 476 阅读 · 0 评论 -
6.依赖注入
http://blog.youkuaiyun.com/yqj2065/article/details/8510074转载 2016-01-15 10:17:35 · 374 阅读 · 0 评论 -
5. MVC,MVP 和 MVVM
一、MVCMVC模式的意思是,软件可以分成三个部分。各部分之间的通信方式如下。所有通信都是单向的。二、互动模式接受用户指令时,MVC 可以分成两种方式。一种是通过 View 接受指令,传递给 Controller。 另一种是直接通过controller接受指令。 三、实例:Backbone 实际项目往往采用更灵活的方式,以 Backbone.js 为例。 1. 用户可以向 View 发送指令转载 2015-12-24 22:51:50 · 488 阅读 · 0 评论 -
3. Active Record(活动记录模式)
Active Record(活动记录)定义:在计算机领域中,表示编译器为每个被激活的函数分配的内存空间。 活动记录一般都存在栈中。因为栈结构比较简单,硬件能够支持。Active Record(中文名:活动记录)是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。 Active Record 和 Row Gateway (行记录入口)十分相似,但前原创 2015-04-02 16:10:44 · 1761 阅读 · 0 评论 -
4. PHP之活动记录
数据源架构模式之活动记录【活动记录的意图】 一个对象,它包装数据表或视图中某一行,封装数据库访问,并在这些数据上增加了领域逻辑。【活动记录的适用场景】 适用于不太复杂的领域逻辑,如CRUD操作等。【活动记录的运行机制】 对象既有数据又有行为。其使用最直接的方法,将数据访问逻辑置于领域对象中。 活动记录的本质是一个领域模型,这个领域模型中的类和基数据库中的记录结构应该完全匹配,类的每个域对应表原创 2015-04-02 16:18:14 · 1034 阅读 · 0 评论 -
1. 浅谈设计模式
所有的设计模式都有一些常用的特性:一个标示(a name),一个问题(a problem statement)和一个解决方案(a solution)。一个设计模式的标示是重要的,因为它会让其他的程序员不用进行太深入的学习就能立即理解你的代码的目的(至少通过这个标示程序员会很熟悉这个模式)。问题描述是用来说明这个模式的应用领域。解决方案描述了这个模型的执行。一个好的设计模式的论述应该覆盖使用这个模原创 2015-04-01 23:31:53 · 1054 阅读 · 0 评论 -
9. PHP 之 Factory pattern(工厂设计模式)
什么是工厂模式?工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。工厂模式可分为以下三种类型,需要根据不同需求来决定使用哪一种模式: 1.简单工厂(不是真正意义上的设计模式) 2.工厂方法(定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类实例化推迟到子类) 3.抽象工厂(提供一个接口,用于创建相关或依赖对象的家族,而不需要翻译 2015-04-03 13:48:25 · 420 阅读 · 0 评论 -
6. PHP之适配器模式
问题 你如何避免因外部库的API改变而带来的不便?假如你写了一个库,你能否提供一种方法允许你软件的现有用户进行完美地升级,即使你已经改变了你的API?为了更好地适宜于你的需要,你应该如何改变一个对象的接口?解决方案 适配器(Adapter)模式为对象提供了一种完全不同的接口。你可以运用适配器(Adapter)来实现一个不同的类的常见接口,同时避免了因升级和拆解客户代码所引起的纠纷。考虑一下当(不翻译 2015-04-03 11:13:05 · 404 阅读 · 0 评论 -
8. 工厂设计模式(factory pattern)
一、 抽象工厂(Abstract Factory)模式 抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。为了方便引进抽象工厂模式,引进一个新概念:产品族(Product Family)。所谓产品族,是指位于不同产品等级结构,功能相关联的产品组成的家族。如图: 图中一共有四个产品族,分布于三个不同的产品等级结构中。只要指明一个产品所处的产品族以及它所属的等级结构,就可以唯一的确定翻译 2015-04-03 13:46:27 · 415 阅读 · 0 评论 -
5. Adapter Pattern(适配器模式)
一、 适配器(Adapter)模式 概述: 在软件开发过程中,我们要经常要复用我们以前开发的一些“现存对象”,但是这些“现存对象”并不能满足我们新的应用环境。怎样才能良好的复用这些对象,以满足我们的应用环境,这就是适配器(Adapter)所要解决的问题。将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。转载 2015-04-03 10:28:56 · 582 阅读 · 0 评论 -
7. Decorator pattern(装饰器模式)
解读设计模式—-装饰模式(Decorator Pattern)装饰模式(Decorator)也叫包装器模式(Wrapper)。以“装饰”的含义生动形象地描绘了“动态地给一个对象添加一些额外的职责”的意图。GOF在《设计模式》一书中给出的定义为:动态地给一个对象添加一些额外的职责。装饰模式充分利用了继承和聚合的优势,创造出无与论比的设计美学。就增加功能来说,Decorator模式相比生成子类更为灵活。翻译 2015-04-03 11:46:52 · 457 阅读 · 0 评论 -
13. PHP 表数据入口(table data gateway)
前一章中使用动态记录模式对数据库表进行建立,获取,更新(通过扩展实现删除)每 一行的操作。动态记录模式是一种简单的抽象数据库连接的方式,但是这种简洁性也正是它 的弱点。动态记录类只处理单一的行,使得它在需要呈现大量信息的WEB应用中显得效率 很低,如旅游预约,在线购物等。在这一类应用――几乎是主流的WEB应用中,数据集的 使用就是更普遍更流行的。 问题 怎样才能简单的操作数据库表与表中的翻译 2015-04-07 11:34:50 · 815 阅读 · 0 评论 -
12. 表数据入口(Table Data Gateway)
一:表数据入口(Table Data Gateway)表数据入口提供了用于访问单个表或者视图(也包含了联表查询)的所有SQL,通常一个表一个类。其它代码通过它来实现对数据库的交互。基于这个特点,表数据入口和事务脚本代码以及表模块结合的很好。在查询时候,表数据接口可以返回数据集 或者 DTO 或者 DTO列表。在 事务脚本 代码中已经阐述过了 DTO 以及 DTO 的列表这种形式。但是使用 DTO 这翻译 2015-04-07 11:32:22 · 810 阅读 · 0 评论 -
11.策略模式(Strategy Pattern)
1. 概念策略模式(Strategy):它定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法的变化不会影响到使用算法的客户。(原文:The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable. Strategy let翻译 2015-04-07 11:16:23 · 411 阅读 · 0 评论 -
10. 单例模式(singleton pattern)
单例模式单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。 单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。要实现这一点,可以从客户端对其进行实例化翻译 2015-04-07 10:19:06 · 566 阅读 · 0 评论 -
7.Active Record
Active Record(中文名:活动记录)是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。Active Record 和 Row Gateway (行记录入口)十分相似,但前者是领域模型,后者是一种数据源模式。关系型数据库往往通过外键来表述实体关系,Active Record 在数据源层面上也将这种关系映射为对象的关联和聚集。Active R转载 2016-01-18 23:39:39 · 477 阅读 · 0 评论 -
6. 策略模式
一般用 if else 判断,,这是硬编码。如果某一天,增加了针对小孩的广告,就得修改 if else 的代码。UserStrategy.php<?php//策略接口文件,约定了策略有哪些行为namespace IMooc;interface UserStrategy{ //有2个策略,一个展示广告,二是展示分类 public function showAd(); publ翻译 2016-03-01 22:49:28 · 439 阅读 · 0 评论 -
5.适配器模式
IDatabase.php<?phpnamespace IMooc;interface IDatabase{ public function connect($host,$user,$password,$dbname); public function query($sql); public function close();}MySQL.php<?phpnamespa翻译 2016-02-28 22:37:35 · 461 阅读 · 0 评论