zoukankan      html  css  js  c++  java
  • [一]设计模式初探

    模式,顾名思义,就是做一种事情的方法归纳,就经验来说,做什么事情有个好的方法来应对都是可以事半功倍的,在软件开发中何谓好的模式?

    我认为好的模式简单来说就是保证你应对需求变化的时候不用做更多的代码修改,而只需要在原有的基础上进行扩充,也就是所谓的”关闭修改,开放扩展。“

    要做到这一点,系统模块之间的关系绝对不能过于紧密,过于紧密的结果就是,当你一个模块需要修改,另外一个模块也需要做相应的修改,这样,我们软件开发的成本就加大了,甚至完全适应不了新的需求,这是非常糟糕的。所以,我们在系统架构的设计上一定要做到低耦合(考虑可能的需求变化,任何复杂的设计都是有代价的,在没有必要做特殊处理的地方都刻意做得很复杂,系统的效率可能会非常低下,这一点在理解了.NET调用虚函数等机制后会有所了解)。假如你满足了低耦合的条件,一般情况也说明你的系统内聚性比较高(类的责任清晰)。经典的设计模式就是让我们构建具有此特性系统架构的方法。

    今天,我稍微归纳一下几个设计模式的功能:

    1.策略模式:定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

    2.观察者模式:在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。

    3.动态地将责任附加到对象上。想要扩展功能,装饰者提供有别于继承的另一种选择。

    4.抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

    5.工厂方法模式:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

    6.单件模式:确保一个类只有一个实例,却提供全局访问点。

    7.命令模式:将请求封装成对象,这可以让你使用不同的请求,队列,或者日志请求来参数化其他对象。命令模式也可以支持撤销操作。

    8.适配器模式:将一个类的接口转换成客户端期望另一个接口。

    9.外观模式:提供另一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

    10.模板方法:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

    11.迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。

    12.组合模式:允许你将对象组成树形结构来表现“整体/部分”的层次结构。组合能让客户以一直的方式处理个别对象和对象组合。

    13.状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。

    14.代理模式:为另一个对象提供一个替身或站位符以访问这个对象。

    15.复合模式:复合模式结合两个或以上的模式,组成一个解决方案,解决一再发生的一般性问题。

    学习设计模式时间并不长,感觉这门学问在软件开发中的地位是相当重要的,作为一个初级开发人员,我觉得学习它很有必要的,特别是在看别人的代码时候,我们可以知其然,更知其所以然,这对程序员的提高是相当有帮助的,呵呵。

  • 相关阅读:
    Kubernetes 集成研发笔记
    Rust 1.44.0 发布
    Rust 1.43.0 发布
    PAT 甲级 1108 Finding Average (20分)
    PAT 甲级 1107 Social Clusters (30分)(并查集)
    PAT 甲级 1106 Lowest Price in Supply Chain (25分) (bfs)
    PAT 甲级 1105 Spiral Matrix (25分)(螺旋矩阵,简单模拟)
    PAT 甲级 1104 Sum of Number Segments (20分)(有坑,int *int 可能会溢出)
    java 多线程 26 : 线程池
    OpenCV_Python —— (4)形态学操作
  • 原文地址:https://www.cnblogs.com/nero/p/1812814.html
Copyright © 2011-2022 走看看