head-first-设计模式
文章平均质量分 64
xy_cpp
.程序员的三大浪漫:图形学、编译原理、操作系统
展开
-
[Design Pattern]1.引子
欢迎来到设计模式世界有些人已经解决你的问题了使用设计模式最好的方式是:把模式装进脑子里,然后在你的设计和已有的应用中,寻找何处可以使用它们。以往是代码复用,现在是经验复用。使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。如何学习1.慢一点,你理解的越多需要记的就越少。2.勤做练习,原创 2017-11-13 22:22:49 · 386 阅读 · 0 评论 -
[DesignPattern]StatePattern
状态模式基本常识:策略模式和状态模式是双胞胎,在出生时才分开。糖果机器,需要完成一个状态图。如果用程序状态机(PSM),太多的if,如果变更需求,会造成混乱的状态。因为我们没有遵循开放封闭原则,将不会改变的状态封装起来。状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。 - 首先,我们定义一个State接口。在这个接口内,糖果机的每个动作都有一个对应的方法。 - 然后为机原创 2017-11-27 20:02:44 · 188 阅读 · 0 评论 -
[DesignPattern]IteratorAndCompositePattern
迭代器与组合模式如何让客户遍历你的对象而又无法窥视你存储对象的方式?如何创建一些对象的超集合(super collection),可以一口气就跳过某些让人望而生畏的数据结构。对象村餐厅和对象村煎饼屋合并了。但是它们的菜单是用不同的数据结构组合而成,我们的女服务员最好只用实现一个相同的接口,最小化女招待代码中的具体引用。这时候迭代器模式就派上用场了。public interface Iterator原创 2017-11-26 12:53:37 · 168 阅读 · 0 评论 -
[DesignPattern]剩下的模式
剩下的模式责任链(邮件分类处理,现在的项目事件处理businessHandler是这个的变种)当你想要让一个以上的对象有机会能够处理某个请求的时候,就使用责任链模式(Chain of Responsibility Pattern)。 责任链的优点 责任链的用途和缺点 将请求的发送者和接受者解耦。 经常被使用在窗口系统中,处理鼠标和键盘之类的事件。 可以简化你的对象,因为它不需要知道原创 2017-12-03 00:12:12 · 190 阅读 · 0 评论 -
[DesignPattern]结束也是开始
真实世界中的模式模式模式是在某情景(context)下,针对某问题的某种解决方案。 - 情景就是应用某个模式的情况,这应该是会不断出现的情况。 - 问题就是你想在某情境下达到的目标,但也可以是某情境下的约束。 - 解决方案就是你所追求的:一个通用的设计,用来解决约束、达到目标。模式装饰者状态迭代器外观策略代理工厂方法适配器观察者模板方法组合单件抽象工厂命令模式分类原创 2017-12-02 20:39:58 · 205 阅读 · 0 评论 -
[DesignPattern]CompoundPattern
复合模式设计模式通常被一起使用,并被组合在同一个设计解决方案中。复合模式在一个解决方案中结合两个或多个模式,以解决一般或重复发生的问题。与鸭共舞???从头建立鸭子模拟器。一个池塘各种鸭子在实现不同呱呱叫的方式。在模拟器中加入鹅对象,将鸭子和鹅掺杂在一起。(适配器模式)如何在不变化鸭子类的情况下,计算呱呱叫的次数?(装饰者模式)如何进行质量控制确保创建和装饰鸭子的过程?(工厂模式)巡逻员突然原创 2017-12-02 14:14:10 · 238 阅读 · 0 评论 -
[DesignPattern]TemplateMethodPattern
模板方法模式 - 封装算法星巴克咖啡师傅训练手册,从中我们发现星巴克的咖啡和茶都采用相同的算法和步骤模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现。模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。这可以确保算法的结构保持不变,同时由子类提供部分实现。abstract class Abstr原创 2017-11-22 21:41:37 · 265 阅读 · 0 评论 -
[DesignPattern]DecoratorPattern
装饰者模式你将在本章学到如何使用对象组合的方式(其实就是俄罗斯套娃),做到在运行时装饰类。为星巴克咖啡设计系统的时候可以用这个模式设计原则类应该对扩展开放,对修改关闭。我们的目标是允许类容易扩展,在不修改现有代码的情况下,就可以搭配新的行为。如能实现这样的目标,有什么好处呢?这样的设计具有弹性可以应对改变,可以接受新的功能来应对改变的需求。装饰者和被装饰者必须是一样的类型,也就是有共同的超类,这原创 2017-11-16 21:12:31 · 203 阅读 · 0 评论 -
[DesignPattern]适配器模式与外观模式
适配器模式与外观模式适配器模式(欧式壁式插座->交流电适配器->标准的交流电插座)将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。装饰者模式对适配器说:我们的工作是扩展我们包装的对象的行为或责任,并不是”简单传送”就算了。外观模式(简单看一次家庭影院:一个按钮开启所有电器)提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用原创 2017-11-21 23:33:02 · 217 阅读 · 0 评论 -
[Design Pattern]Observer Pattern
观察者模式(代表人物MVC)有一个模式可以帮你的对象知悉现况,不会错过该对象感兴趣的事。对象甚至在运行时可决定是否要继续被通知。定义观察者模式定义了一系列对象之间的一对多关系。当一个对象改变状态,其他依赖者都会收到通知。记住根据一个WeatherData对象,可以推送给很多天气布告板。它们之间有相互对象的引用。例如书上的P56设计原则4.为交互对象之间的松耦合设计而努力。要点观察者模式定原创 2017-11-16 09:42:21 · 233 阅读 · 0 评论 -
[DesignPattern]命令模式
命令模式-将发出请求的对象和执行请求的对象解耦带插槽的遥控器以及顾客、女招待、订单,以及快餐厨师之间的交互。顾客(Client)生成订单(command这里面包含快餐厨师做菜的方法)女服务员(Invoker)拿起订单(takeOrder == setCommand)并orderUp(execute)给厨师control->execute->lightOn命令模式将”请求”封装成对象,以便使用不同的原创 2017-11-20 21:58:48 · 226 阅读 · 0 评论 -
[DesignPattern]ProxyPattern
代理模式玩过扮白脸、扮黑脸的游戏吗?这就是代理要做的:控制和管理访问。还记得状态模式的那台糖果机吗?现在我们需要远程监控糖果机。(在开始编码之前,需要收集需求)。远程代理远程代理就好比“远程对象的本地代表”。何谓“远程对象“?这是一种对象,活在不同的Java虚拟机(JVM)堆中。你的客户对象所做的就像是在做远程方法调用,但其实只是调用本地堆中的”代理“上的方法,再由代理处理所有网络通信的低层细节原创 2017-11-28 23:38:32 · 268 阅读 · 0 评论 -
[Design Pattern]工厂模式
工厂模式当有一些要实例化的具体类,究竟实例化哪个类,要在运行时由一些条件来决定。当代码使用大量具体类时,我们就要考虑使用工厂模式了。简单披萨工厂生产披萨(简单工厂生产类)。加盟披萨店,对披萨进行质量控制,给披萨店使用的框架,同时允许子类做决定(工厂方法模式)。最后通过抽象工厂模式使得每家披萨店使用的原料一致。工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化原创 2017-11-19 10:51:59 · 234 阅读 · 0 评论 -
[Desigh Pattern]2.Strategy Pattern (策略模式)
Strategy Pattern (策略模式)设计原则找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。把会变化的部分取出并”封装”起来,好让其他部分不会受到影响。结果,代码变化引起的不经意后果变少,系统变得更有弹性。针对接口编程,而不是针对实现编程。从现在开始,鸭子的行为将被放在分开的类中,此类专门提供某行为接口的实现。这样,鸭子类就不再需要知道行为的实现细节原创 2017-11-14 15:57:56 · 358 阅读 · 0 评论 -
MVC、单例、工厂
MVC要点:1、MVC是复合模式,结合了观察者模式、策略模式和组合模式。2、模型使用观察者模式,以便观察者更新,同时保持两者之间解耦。3、控制器是视图的策略,视图可以使用不同的控制器实现,得到不同的行为。例如,如果聊天在机器人端,我们使用语音控制器,可以处理语音输入。 在客户端,我们使用文字控制器,可以处理文字输入。4、视图使用组合模式实现用户界面,用户界面通常组合了嵌套的组件,像...原创 2018-03-05 16:19:42 · 354 阅读 · 0 评论