jokes000

#

设计模式--代理模式

代码:
      应用:/Files/jokes000/Proxy.rar
      示例:/Files/jokes000/Proxy.txt

      代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。

      应用场合:
            A:远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。例:WebService在.NET中应用。
            B:虚拟代理,根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。(这样就可以达到性能最优化,比如说你打开一个很大的HTML网页时,里面可能有很多的文字和图片,但你还是可以很快打开它,此时你看到的是所有的文字,但图片确实一张一张的下载后才能看到。那些未打开的图片框,就是通过虚拟代理来代替了真实的图片,此时代理存储了真实图片的路径和尺寸。)
            C:安全代理,用来控制真实对象访问时的权限。
            D:智能指引,是指当调用真实的对象时,代理处理另外一些事。(如计算真实对象的引用次数。)

      代理模式结构图:
      

posted @ 2011-10-10 11:14 Voices. 阅读(158) | 评论 (0)编辑 收藏

设计模式--装饰模式

代码:
      示例:/Files/jokes000/Decoration-装饰模式.rar 
      基本:/Files/jokes000/Decoration.txt
   
装饰模式(Decorator),动态给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。(把所需功能按正确顺序串联起来进行控制)

      装饰模式结构图:
      Component是定义一个对象接口,可以给这些对象动态地添加职责。ConcreteComponent是定义了一个具体的对象,也可以给这个对象添加一些职责。Decorator,装饰抽象类,继承了Component,从外类来扩展Component类的功能,但对于Component来说,是无需知道Decorator的存在的。至于ConcreteDecorator就是具体的装饰对象,起到给Component添加职责的功能。
      

      装饰模式是利用SetComponent来对对象进行包装的。这样每个装饰对象的实现就喝如何使用这个对象分开了,每个装饰对象只关心自己的功能,不需要关心如何被添加到对象链当中。

posted @ 2011-10-10 10:42 Voices. 阅读(235) | 评论 (0)编辑 收藏

C++类继承的问题

      公用继承(public):基类成员保持自己的访问级别。
      受保护继承(protected):基类的public和protected成员在派生类中为protected成员。
      私有继承(private):积累的所有成员在派生类中为private成员。                                       示例见《C++ Primer》 P483

      默认继承保护级别:
            class Base { /* ... */ };
            struct D1 : Base { /* ... */ };   // public inheritance by default
            class D2 : Base { /* ... */ };    // private inheritance by default

posted @ 2011-10-09 21:51 Voices. 阅读(185) | 评论 (0)编辑 收藏

依赖倒转原则

      定义:抽象不应该依赖细节,细节应该依赖于抽象,这句话说白了就是要对接口编程,不要针对实现编程。
             A.高层模块不应该以来底层模块。
             B.抽象不应该以来细节。细节应该以来抽象。

      依赖倒转其实可以说是面向对象设计的标志,用哪种语言来编写程序不重要,如果编写时考虑的都是如果针对抽象编程而不是针对细节编程,即程序中所有的依赖关系都是终止于抽象类或者借口,那就是面向对象的设计,反之就是过程化的设计了。

      里氏代换原则:
            一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且它察觉不出父类对象和子类对象的区别。也就是说,在软件里面,把父类都替换成它的子类,程序的行为没有变化。
            只有当子类替换掉父类,软件单位的功能不收到影响时,父类才能真正被服用,而子类也能够在父类的基础上增加新的行为。
        
      

posted @ 2011-10-09 21:46 Voices. 阅读(209) | 评论 (0)编辑 收藏

开放-封闭原则

      开放封闭原则,是说软件试题(类、模块、函数等等)应该可以扩展,但是不可修改。

      两个特征: 1.对于扩展是开放的(Open for extension)
                     2.对于更改是封闭的(Closed for modification)

      开放-封闭原则是面向对象设计的核心所在。遵循这个原则可以带来面向对象技术所声称的巨大好处,也就是可维护、可扩展、可复用、灵活性好。开发人员应该仅对程序中呈现出频繁变化的那些部分作出抽象,然而,对于应用程序中的每个部分都可以地进行抽象同样不是一个好主意。拒绝不成熟的抽象和抽象本身一样重要。

posted @ 2011-10-09 21:39 Voices. 阅读(245) | 评论 (0)编辑 收藏

单一职责原则

      如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其它职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。

      软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离。如果你能够想到多余一个的动机去改变一个类,那么这个类就具有多余一个的职责。

posted @ 2011-10-09 21:34 Voices. 阅读(161) | 评论 (0)编辑 收藏

设计模式--策略模式

      策略模式(Strategy):定义了算法家族,分别封装起来,让它们之间可以互相替换,从概念上看,这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有算法,减少了各种算法类与使用算法类之间的耦合。此模式让算法的变化不会影响到使用算法的客户。

      优点:⑴ Stratey类层次为Context定义了一系列的可供重用的算法或行为。继承有助于析取出这些算法中的公共功能。
              ⑵ 简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。

      策略模式就是用来封装算法的,但在实践中,我们发现可以用它来封装几乎任何类型的规则,只要在分析过程中听到
需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。

      在基本的策略模式中,选择所用具体实现的职责由客户端对象承担,并转给策略模式的Context对象。

      策略模式结构图:
      

posted @ 2011-10-09 20:55 Voices. 阅读(268) | 评论 (0)编辑 收藏

仅列出标题
共4页: 1 2 3 4