设计模式
文章平均质量分 92
少爷凡隐
这个作者很懒,什么都没留下…
展开
-
译-设计模式-结构模式之Bridge
目的Bridge是结构模式的一种,它可以帮你分离一个巨大的类或者将一组关系相近的类分离成为两个独立的层次结构,抽象和实现,可以各自独立开发。问题抽象?实现?听起来害怕?我们首先来看个简单的例子。你有一个几何Shap类,他有一对子类:Square和Triangle。你希望扩展这个层次结构来融入颜色以便创建红色和蓝色的形状。但是因为你已经有子类,你需要创建4个类来组合,比如BlueSquare和RedT翻译 2017-10-18 19:51:16 · 330 阅读 · 0 评论 -
设计模式-行为模式之Chain-Of-Responsibility
责任链(Chain Of Responsibility)是一种行为模式,通过给多个对象一个机会去处理请求的的方式来避免请求发送者和接受者的耦合。责任链接收对象并且沿着链条传递它,直到一个对象来处理它。问题假设你在做一个订单系统。你第一个任务就是限制用户对系统的访问,只有已经授权的用户可以创建订单。另外,一些用户拥有管理员权限,可以访问全部的订单。你意识到这些检查必须顺序处理。程翻译 2017-12-16 14:30:35 · 395 阅读 · 0 评论 -
设计模式-行为模式之Command
Command(命令)是一种行为模式,让你可以把请求转换到单独的对象,可以用来把不同的请求参数化,排队或者记录请求,并且支持撤销操作。问题假设你在做一个新的文本编辑器。你创建了一个Button类,可以被用做工具栏的按钮,也可以用作对话框的通用按钮。这些按钮看起来很像,但是它们做不同的事情。此时我们要把针对不同按钮点击的处理代码放在哪里呢?简单的解决方法是为每个按钮创建一个But翻译 2017-12-26 22:41:37 · 281 阅读 · 0 评论 -
设计模式-行为模式之Mediator
Meditor是行为模式的一种,允许你定一个对象来封装一些对象的关联关系,以使这些对象相互独立。问题你有一个对话框用来编辑用户的配置。它是由TextEdit、Checkboxes、Button等组成的表单。表单中元素会相互影响。比如,“我有一条狗”的复选框应当展示隐藏的文本框用来输入狗的名字。另外一个例子是提交按钮在保存数据钱必须娇艳所有字段的数据。吧这些逻辑直接放在表单元素代翻译 2018-01-14 19:41:29 · 434 阅读 · 0 评论 -
设计模式-行为模式之Memento
更多请移步我的博客意图Memento是行为模式的一种,他允许你在不暴露对象内部结构的情况下捕获其内部状态,以便稍后对象可以返回到这个状态。问题假设你在写一个文本编辑器。核心逻辑放在Editor主类中。另外一些特性,像文本格式化,内联图像等,放在不同的命令类中。你决定让用户的操作变得可逆。换句话讲,要增加“撤销”功能。为了实现它,你需要在执行任何操作前保存Editor的状翻译 2018-01-05 18:29:43 · 332 阅读 · 0 评论 -
设计模式-行为模式之Observer
Observer是行为模式的一种,允许你定义对象间一对多的关系,以便一个对象状态改变后,它的依赖者可以被通知并可以自动更新。问题假设你有两个对象,Customer和Store。商店采购了一批新产品,一些客户对这些产品很感兴趣。客户可能每天都来商店看下是否有感兴趣的产品售卖,但大多情况下的是无意义的,因为产品还在路上。另一方面,商店可以给所有的客户发送上新的邮件。但是对那些不关心翻译 2018-01-15 20:45:00 · 277 阅读 · 0 评论 -
设计模式-行为模式之Template Method
Template Method 时行为模式的一种,让你定义一个算法的骨架,允许子类重新定义在不改变结构的情况下重新定义算法的某些步骤。问题假设你正在写一个挖掘办公文档数据的应用程序。用户想要输入各种格式的文件(PDF,DOC,CSV),程序输出给他们有用的格式化数据。第一个版本你仅支持DOC文件。下一个版本支持CSV格式文件。一个月后,你又增加了从PDF中分析数据的功能。这时翻译 2018-01-30 20:47:49 · 256 阅读 · 0 评论 -
设计模式-行为模式之Strategy
Strategy是行为模式的一种,让你定义一组算法,各自封装,并且他们可替换。Strategy让这些算法独立与使用他们的客户端。问题一天你决定写一个给驴友使用的导航应用。这个应用以漂亮的地图为中心,允许用户在任何城市快速的定位。应用最大的特点是能够自动规划路线,所以你决定特别关注这点。用户可以输入一个期望的目的地,能够快速在屏幕上画出路线。第一个版本的应用只能规划道路上的路线翻译 2018-01-26 17:22:39 · 235 阅读 · 0 评论 -
设计模式-行为模式之Iterator
Iterator是行为模式的一种,允许在不暴露底层结构的情况下顺序访问聚合对象中的元素。问题集合是编程中最常用的数据结构。它把一组对象放到一个单独的容器中。大多集合看起来都像元素的列表。然而,一些集合以树、图或者其他复杂数据结构组织数据。并且每个集合都必须提供一个方法让用户可以按照顺序处理集合中的元素。但是,要怎么顺序遍历一个复杂结构呢?必须有几个方法来做到这一点。比如,今天想翻译 2018-01-10 17:18:04 · 240 阅读 · 0 评论 -
设计模式-行为模式之State
State是行为模式的一种,它允许你在对象内部状态发生变化时改变其行为。这个对象会改变它的类。问题状态模式和有限状态机很相似。它主要的思想是程序是几个状态之一,这些状态相互关联。状态的数量和它们之间的转换是有限的并且是预先定义的。根据当前的状态,程序对相同的事件会有不同的响应。类似的方法可以应用到对象上。比如,Document(提案)对象可以是以下三种状态之一:Draft(草翻译 2018-01-19 17:25:41 · 263 阅读 · 0 评论 -
设计模式-创建模式之Singleton
Singleton是创建模式的一种,让你可以确保一个类只有一个实例,并为此实例提供一个全局访问点。问题Singleton同时解决了两个问题(违反了单一职责原则):确保一个类只有一个实例。最常见原因是控制一些共享资源,比如,数据库。假设你已经创建了一个新对象,不久,又尝试创建一个新的。在这种秦光下,你想要老的那个对象而不是新创建一个实例。它不能通过正常的构造方法完成,因为在设计翻译 2017-11-26 11:50:59 · 268 阅读 · 0 评论 -
设计模式-创建模式之Prototype(Clone)
Prototype(也叫做Clone)是创建型模式的一种,允许你通过复制现有的对象来生成新的对象,而不会影响现有对象的内部。问题你有一个对象并且想要创建一个副本。你该怎么做?首先,你需要创建同样class的一个新对象。然后,你必须遍历源对象的所有字段并把值拷贝到新对象中。但是这么做有一个问题。不是所有对象都可以通过这种方式被拷贝。一些对象拥有无法从外部访问的私有字段。这么做还有翻译 2017-11-23 10:21:01 · 456 阅读 · 0 评论 -
译-设计模式-结构模式之Decorator
Decorator(装饰器)是一个结构设计模式,可以让你在封装包涵对象原有行为的基础上增加新的行为。问题你需要动态的添加或者移除一个对象的责任,但是你要做到和应用中其他代码的兼容。当你需要扩展一个类的行为时继承时第一个想到的处理方式。然而,继承是静态的。你不能够增翻译 2017-09-24 17:50:06 · 394 阅读 · 0 评论 -
译-设计模式-结构模式之Adapter
adapter目的适配器是一种结构设计模式,使得不兼容接口间的可正常进行协作。问题想象你有一个使用XML作为数据处理格式的APP,但你用到了一个仅支持JSON数据格式的类库。举个例子,你有一个做股票数据的APP。他从多个数据源获取XML来展示成图标。在一个新版本中,你决定使用一些三方的分析包。但是有一个问题翻译 2017-09-18 21:35:35 · 527 阅读 · 0 评论 -
设计模式-结构模式之Facade
Facade是结构模式的一种,它让你可以为一个复杂的系统,类库或者框架提供一个简单的接口。问题想象一下,代码必须和一大堆复杂的框架或者类库协作。你必须手动实力话这些对象,跟踪依赖,正确的顺序关系等等。最后,你的业务逻辑类会和第三方类库的实现紧密耦合。这些代码难以理解和维护。解决门面是一个类,它为一个包含很多类的复杂子系统提供一个简单的接口。相对直接调用子系统而言,门面提供有翻译 2017-10-25 20:40:48 · 326 阅读 · 0 评论 -
译-设计模式-结构模式之Proxy
Proxy是结构模式的一种,它能够让你为另外一个对象提供一个替身或者占位符来控制对它的访问。问题为什么要控制对对象的访问?比如:你有一个需要消耗大量系统资源的对象。你时不时会用到它,但不是一直使用。因此,这个对象不用再程序启动时创建,而是当真正需要它的时候再创建。每个用到这个对象的客户端可能都有一些延迟实例化代码。显而易见,它导致了大量重复代码。理想状态下,我们可以直接在对翻译 2017-10-27 17:51:02 · 439 阅读 · 0 评论 -
设计模式-结构模式之Composite
Composite是结构设计模式的一种,允许你像树一样组合对象,并且允许客户端像单个对象一样和这些结构协作。问题Composite模式只有在你的业务模型可以被表示为一个树结构时才有意义。比如,你有两个对象:Product和Box。这个Box可以包含几个Product和一些更小的Box。这些更小的Box也可以包含一些Product或者更小的Box等等。现在,想象你的Produ翻译 2017-10-21 13:37:18 · 338 阅读 · 0 评论 -
译-设计模式-结构模式之Flyweight
Flyweight是结构模式的一种,通过在多个对象见共享对象状态的通用部分而不是让各个对象独自持有的方式来让你在可用的RAM中装入更多的对象。问题在长时间工作后想要找些乐趣,你决定写一个简单的视频游戏。玩家能够在地图上移动并且可以相互射击。你决定实现一个真实的粒子系统并让它称为这个游戏的特性。子弹,导弹和爆炸产生的碎片应该到处飞舞并且能够给玩家分配经验。过了一会,你最后一次翻译 2017-11-02 11:08:55 · 311 阅读 · 0 评论 -
设计模式-结构模式之小结
结构设计模式使的我们简单快速的建立类的层级及不同类之间的关系,明确不同层级间的责任和边界,让各个模块、系统间相互独立并很好的协作。概览Adapter模式适配器的目的是使不兼容接口间的可正常进行协作,它允许我们新增接口。主要用来解决下面两个问题:接口间输入输出不匹配的问题,适配器在无法相互直接使用的接口间加入中间转换层,对数据格式进行转换,使接口间可以顺利协作。当你需要复原创 2017-11-03 14:59:58 · 489 阅读 · 0 评论 -
设计模式-创建模式之Factory Method
Factory Method是创建模式的一种,他在父类中提供一个用来创建对象的接口,但是允许子类修改创建对象的类型。问题假设你有一个后勤管理应用。应用的第一个版本只需要处理卡车这种运输方式,所以,你有一个Truck类。不久,你的应用很受欢迎,你收到了许多需求,包括水运。好消息,不是吗?但是你的代码怎么样呢?看起来,你的代码有许多地方要和Truck类耦合。添加Ship类需要改翻译 2017-11-14 16:02:05 · 302 阅读 · 0 评论 -
设计模式-创建模式之Builder
Builder是创建模式的一种,让你可以使用相同的构建过程生成不同类型和对象的表示形式。BUilder允许一步一步构建复杂对象。问题假设有一个复杂对象需要一步一步的初始化许多字段和嵌套对象。这些代码通常放在一个有很多参数的构造方法中,或者更糟糕,分散在客户端代码中。比如,让我们考虑下如何创建一个House对象。创建一个简单的房子,你需要盖四面墙,安装一个门和两个窗户,构建房顶。翻译 2017-11-20 10:17:12 · 255 阅读 · 0 评论 -
设计模式-创建模式之Abstract Factory
Abstract Factory是创建模式的一种,让你在没有指定具体类的情况下生产相关对象的系列。问题假设你在写一个家具店的模拟器。你的代码由以下构成:相关产品的系列,像:Chair + Sofa + CoffeeTable。系列的几个变种。比如,产品Chair + Sofa + Coffee + CoffeeTable可以有这些变种:IKEA,VictorianSty翻译 2017-11-15 19:49:07 · 287 阅读 · 0 评论 -
设计模式-行为模式之Visitor
Visitor是行为模式的一种,允许你在不改变要操作对象类的情况下定义一个新操作。问题你的团队正在开发一款地理信息结构地图的app。图的节点不仅表示城镇也有其他诸如景点,行业等信息。节点间通过道路关联。在引擎中,每个节点都是一个对象,他们的类型由他们自己的类来表示。你接到一个任务,要把地图导出为XML。乍看之下很容易实现。你需要为每个类型的节点添加一个导出方法,然后遍历地图并为翻译 2018-02-05 20:40:07 · 281 阅读 · 0 评论