• 设计模式的理解


    设计模式的理解

    设计模式的本职是是软件工程在维护性、扩展性、变化性、复杂度都很低,面向对象是基础,设计模式是在具体的方法、工具。

     

    一、策略模式

    定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换

    何时使用

    一个系统有许多类,而区分它们的只是他们直接的行为时

    优点

    算法可以自由切换

    避免使用多重条件判断(如果不用策略模式我们可能会使用多重条件语句,不利于维护)

    扩展性良好,增加一个策略只需实现接口即可

    缺点

    策略类数量会增多,每个策略都是一个类,复用的可能性很小

    所有的策略类都需要对外暴露

    使用场景

    多个类只有算法或行为上稍有不同的场景

    算法需要自由切换的场景

    需要屏蔽算法规则的场景

    应用实例

    出行方式,自行车、汽车等,每一种出行方式都是一个策略

    商场促销方式,打折、满减等

    Java AWT中的LayoutManager,即布局管理器

    注意事项

    如果一个系统的策略多于四个,就需要考虑使用混合模式来解决策略类膨胀的问题

     

     

    总结:分析项目种变化和不变化的部分,把变化的部分做成变化行为组,变化可以替换,

    多用接口比继承更简单,复用性非常好  

     

    二、观察者模式Observer

    观察者对应对多的依赖关系设计。观察者一般可以看做是第三者,比如在学校上自习的时候,大家肯定都有过交头接耳、各种玩耍的经历,这时总会有一个“放风”的小伙伴,当老师即将出现时及时“通知”大家老师来了。再比如,拍卖会的时候,大家相互叫价,拍卖师会观察最高标价,然后通知给其它竞价者竞价,这就是一个观察者模式。

     优点

    观察者和被观察者是抽象耦合的建立了一套触发机制

     缺点

    如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间

    如果观察者和观察目标间有循环依赖,可能导致系统崩溃

    没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的

     使用场景

    关联行为或者事件多级触发场景

    跨系统的消息变换场景,如消息队列的处理机制

    注意事项

    避免循环引用

    如果顺序执行,某一观察者错误会导致系统卡壳,一般采用异步方式

     

     

    三、装饰者模式

    动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

    例如:打包快递:

    1. 主体:陶瓷、衣服、电器
    2. 包装:袋子、箱子、防撞袋、塑料泡沫、纸填充

     

     

     

     

  • 相关阅读:
    UVA 12307 Smallest Enclosing Rectangle
    UVALive 4728 Squares
    扩栈代码
    uva 10256 The Great Divide
    uva 11168 Airport
    uva 10625 Board Wrapping
    bzoj千题计划206:bzoj1076: [SCOI2008]奖励关
    NOIP2017 列队
    bzoj3529: [Sdoi2014]数表
    bzoj1966: [Ahoi2005]VIRUS 病毒检测
  • 原文地址:https://www.cnblogs.com/ruhua1/p/14215317.html
Copyright © 2020-2023  润新知