设计模式
文章平均质量分 74
huang_0_3
这个作者很懒,什么都没留下…
展开
-
设计模式学习笔记(开篇)-抽象工厂 工厂模式 简单工厂(1)
之前,我一直对设计模式有很多不理解,就像简单工厂和工厂模式有什么区别,代理模式/面模式/适配器模式/装饰器模式等都是通过组合包装另一个类。他们之间又什么区别。我甚至认为这就是一个实现方式。同时,继承和装饰器模式都能为一个类添加新的动能,它们之间又有什么不一样。为了搞懂这些问题。我特地去重新学习了设计模式。这里,我学习的书籍是《Head First设计模式(中文版)》 和 《Gof设计模式》《H...原创 2018-12-30 08:49:31 · 236 阅读 · 0 评论 -
设计模式学习笔记-代理模式
代理模式的实现与外观模式的实现基本相同(包装对象)。只是两者的目的不同。外观模式目的是为简化系统之间的复杂性,因为系统之间的调用关系比较复杂,为了方便调用方使用,定义一个通用的高层接口,屏蔽了系统之间的复杂性,方便调用者使用。代理模式目的是为了控制资源的访问。下面两个网址对代理模式的理解还是可以滴,大家可以看看。https://www.cnblogs.com/amei0/p/807...原创 2019-02-16 07:50:21 · 139 阅读 · 0 评论 -
设计模式学习笔记-外观模式
对于一个购物系统,通常需要几个子系统共同完成,它包括商品系统、购物车系统、订单系统、库存系统、支付系统、物流系统等等。想想,这么多系统,作为开发者,写一个商品购买的方法,开发者需要熟悉每个系统的细节和每个系统的接口,同时包括系统之间的调用关系。子系统一两个还可以,如果系统多了,这不就是逼疯开发者么。那么是否可以考虑定义一个上层接口,屏蔽这些系统之间的细节和复杂性。这个上层接口为子系统中较一...原创 2019-02-10 08:22:44 · 177 阅读 · 0 评论 -
设计模式学习笔记-观察者模式
假设你是一个Boss,对员工A,B,C发送消息,你希望一个一个的通知,还是发送一次通过,A,B,C员工都能自动收到相关的通知。方式1,一个一个的通知:abstract class Employee { protected $_name = null; public function __construct($name) { $this->_name = $name; }...原创 2019-02-17 08:12:24 · 108 阅读 · 0 评论 -
设计模式学习笔记-享元模式
小孩画画的时,会使用许多不同颜色的彩色笔,比如使用绿色笔画画这个,然后用红色画画那个,再用蓝色画画蓝天等。这些彩色笔,可以持续使用,也可以交替来回使用。这些不同颜色画笔都是独立个体,不和其他画笔有必要的联系,也就是说,没有规定使用绿色之后才能使用蓝色,或者使用蓝色之后不能红色之类的规定。在面向对象中,类似画笔这样,可以来回交替使用,且都为独立个体(没有上下文关系),为了避免对象的重复创建,节省...原创 2019-03-02 08:11:31 · 261 阅读 · 0 评论 -
设计模式学习笔记-职责链模式
在一个餐厅,这个餐厅提供了不同国家的菜色,比如中国菜、法国菜和日本菜等等。当一个订单下达时,这个厨师根据自己的职责,接收订单,然后做出美味的食物。但如果这个订单不是自己的职责,那么它会直接忽略,交给另一个厨师处理。按照这种方式,把订单一直传下去,直到有人处理。在设计模式中,类似上述过程是情况是,有一个对象链,专门处理不同请求。当请求到来时,从第一个对象开始接收,如果该对象处理不了,传递给第二对...原创 2019-03-02 08:31:24 · 175 阅读 · 0 评论 -
设计模式学习笔记-命令模式
我对命令模式的理解是用一个命令对象(Command),包装一个真正需要执行的对象X(X代表不同对象),而对于要执行X对象的Invoker对象来说。它不关X对象是谁,继承了谁,也不关心要执行这个X对象中的那些方法,因为对象X千万个,方法更是千万个,Invoker关心不过来。所以Invoker想了一个办法,我只接收Command对象,并且执行Command对象中的特定的方法execute。那么想让I...原创 2019-03-02 08:51:17 · 148 阅读 · 0 评论 -
设计模式学习笔记-访问者模式
我对访问者模式的理解是,对于同一个对象或者数据源,由访问者决定这个对象的处理方式或者数据呈现模式。最简单的,对于同样销售数据,对销售者而言,它可能需要知道的是自己的销售多少商品,获得了多少钱,但对老板而言,它需要这份销售记录整理出,每种商品的增长趋势,以决定未来的销售策略。代码如下:interface IVistor{ public function visit(IData $dat...原创 2019-03-03 08:05:28 · 123 阅读 · 0 评论 -
简说MVC
众所周知,MVC 分别代表的是:M:模型(数据层)V:视图(负责视图呈现,用户直观呈现)C:控制器(接收视图输入的请求,并发送的模型,然后响应视图的请求。)其实做过开发的人都知道,其实控制器是可以去掉的,类似PHP中,模型和视图是可以混编在一起的。那么为什么我们还需要控制层。原因如下: 1.因为控制器作用是解析请求,然后操做模型。 2.如果控制器与视图混合,增加代...原创 2019-03-03 08:33:29 · 286 阅读 · 0 评论 -
设计模式-设计模式之间的对比
1.装饰器和适配器,外观模式, 都是在包装对象,但是它们的意图不一样 (1) 适配在于转换接口,以达到客户所希望的那样接口 (2)装饰器,在于增加现有接口中的新职责和能力,不改变接口 (3)外观模式在于简化接口。它将一个或数个类的复杂的一切都隐藏。只暴露一个美好的外观但没有隔离子系统,如果需要更高级的操作,可以之间操作原来的子系统。外观不只是简化了接口,也将客户从组件的子系...原创 2019-03-03 08:39:38 · 334 阅读 · 0 评论 -
设计模式学习笔记-装饰器模式
比如人的行为类,刚刚开始的时候,就能上得了厅堂,下得了厨房。但随着年岁的增长,每个人历经了世事,变得不仅是上得了厅堂,下得了厨房。有些人能斗得过流氓,有些人修得了电脑。那么如果用代码表示这些增加了特殊行为的人。interface IPerson{ public function action();}class Person implements IPerson { //刚刚开始...原创 2019-01-27 08:11:48 · 162 阅读 · 0 评论 -
设计模式学习笔记-适配器模式
一个人,想从一个地方到底另一个地方,可以通过走路,开车,或者骑自行车等等。假设之前有一条乡间小路,之前因为路况不好,人们只能通过走路,或者骑自行车通过。于是开发者针对这条路,开发ITraffic这个接口,同时实现了 Walk,Bike这两个具体类,但随着经济的发展,这条路被修建改善,路完全可以通过车了。本来开发者想通过ITtraffic去实现了Car这个实例。但发现,这个Car的类之前有其他的...原创 2019-01-26 08:10:44 · 159 阅读 · 0 评论 -
设计模式学习笔记(开篇)-抽象工厂 工厂模式 简单工厂(2)
继续上篇 设计模式学习笔记(开篇)-抽象工厂 工厂模式 简单工厂(1) 继续说。上篇讲到了简单工厂模式。简述了它的实现、作用、优点、缺点。同时留下了一个问题。在SimpleFactory这个工厂类中,简单的实现工具的选择是不复杂的,但是当我们加入的产地选择的适合,SimpleFactory的代码量几乎成倍增长,会出现大量的if else。这对于SimpleFactory的维护者(开发者)来说,...原创 2018-12-31 08:36:34 · 196 阅读 · 0 评论 -
设计模式学习笔记-模板模式
在我常见的需求中,比较多的就是数据导出(Excel),常见的做法是如果要导出 User 用户数据,我们写一个函数,把整个导出过程包括标题设置、数据查询、填充导出数据、导出等实现一遍。而当我们导出 Book 书籍数据时我们会重新定义一个函数,然后将上面的步骤重新实现一遍(或者复制一遍)上面的实现方式,可以实现导出效果,但是会写出大量重复的代码(导出操作,填充操作都是可以重复利用的)我们考...原创 2019-01-04 19:29:50 · 124 阅读 · 0 评论 -
设计模式学习笔记(开篇)-抽象工厂 工厂模式 简单工厂(3)
继续上篇 设计模式学习笔记(开篇)-抽象工厂 工厂模式 简单工厂(2)。我们上篇说到了工厂模式,同时留下一个问题。当要制造一个工具时,需要选择制造工艺(大小,外形等),指定材料(不锈钢,铝合金等),颜色(红,黑,绿)等。从上篇学习的工厂模式中,我们很容易想到。为了扩展性,我们会为工艺选择提供一个工厂方法,材料选择提供一个工厂,染料(颜色)选择提供一个工厂方法。这样我们通过三个工厂方法就可以...原创 2019-01-01 08:33:52 · 216 阅读 · 0 评论 -
设计模式学习笔记(开篇)-抽象工厂 工厂模式 简单工厂(总结)
设计模式学习笔记(开篇)-抽象工厂 工厂模式 简单工厂(1) 讲述的是简单工厂的实现,即相关优缺点设计模式学习笔记(开篇)-抽象工厂 工厂模式 简单工厂(2) 讲述的是工厂模式的实现,即相关优缺点设计模式学习笔记(开篇)-抽象工厂 工厂模式 简单工厂(3) 讲述的是抽象工厂的实现,即相关优缺点上面三个是连续的,如果要完整了解,建议从第一篇开始。下面是我自己对抽象工厂模式、工厂...原创 2019-01-01 09:31:02 · 278 阅读 · 2 评论 -
设计模式学习笔记-策略模式
考虑这样一个场景。我们要计算两个数的值,但是算法不确定,可以是加减乘除的任意一种,甚至可以是加减乘除任意组合计算。就实现方式来说可以有多种。比如我可以通过if else 继续算法控制class Context { private $_a = null; private $_b = null; public function __construct($a, $b) { $this...原创 2019-01-12 08:07:30 · 137 阅读 · 0 评论 -
设计模式学习笔记-桥接模式
场景:对于不同国家的人,他们的生活习惯。最简单 什么时候起床,什么时吃饭,什么是睡觉。在这个场景中, 人就是对象,起床,吃饭,睡觉是人的行为可能我们会简单的想到下面的实现方式,创建一个人的行为类,然后让不同的人去继承。比如:abstract class AbstracPerson{ private $_getUpTiem = null; private $_eatTime = nu...原创 2019-01-13 08:00:52 · 201 阅读 · 0 评论 -
设计模式学习笔记-单例模式
在很多时候,需要控制一个类,全局只要一个实例,以控制唯一访问点。而我们今天的主角--单例模式class Single { private static $_instance = null; //静止获取 private $_num = null; private function __construct() {} //禁止实例化 private function __clone(...原创 2019-01-19 07:59:23 · 160 阅读 · 0 评论 -
设计模式学习笔记-生成器模式
想象一下,我们要组装一台台式电脑,我们需要选择机箱,主板类型,CPU类型,硬盘类型等等。然后根据选择的配件,一步一步组合起来,最后变成一台可运行的电脑。每个人对电脑的要求不一样,有些人只需要普通办公娱乐的家庭版配置,而些游戏爱好者,因为游戏要玩的流畅舒服爽,就需要高配置的游戏版配置等等。考虑一下如果要实现不同版本的电脑配置,代码要如何实现我想到的第一方法就是通过前段时间说过的模板方法实...原创 2019-01-20 08:52:02 · 277 阅读 · 0 评论 -
设计模式学习笔记-组合模式
大家都知道,一个企业是有多个部们共同组成,相互协作以实现效率最大化。一个企业的组成是由多个元素组成的,其中最基本的是“人”这个元素,多个人组成一个team,多个team组成一个部门,多个部分组成一个公司。对于一个公司的组织结构,我们如何用代码表示,同时要满足,对于元素(人/对我/部门/公司)的使用,能使用相同的接口。即整体的调用方式和单个的元素的调用方式一致。组织结构: 公司 ...原创 2019-01-26 07:52:27 · 158 阅读 · 0 评论 -
组合与继承的比较
类继承:白盒复用,父类的内部实现细节对子类可见组合:黑盒复用,对象的内部细节不可见类继承在编译时刻静态定义。且可直接使用。一个子类重新定义一些而不是父类的全部操纵类继承不足:1.因为继承在编译时刻就定义好。所以无法在运行时改变从父类继承的实现。2.更糟糕的是,父类至少定义了部分子类的具体表示,因为继承对子类揭示了其父类的实现,所以破坏了封装性。3。且子类与父类依赖关系紧密。以至于父类...原创 2019-03-03 08:44:07 · 201 阅读 · 0 评论