走进设计模式【大纲】

软件设计模式(Software Design Pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
我对它进行以下定义:

  1. 就像数学中的公式一样,它是前人经验的总结。
  2. 是一种套路模板。是一套可以反复利用的套路,模板。
  3. 解决普遍性问题。帮助我们解决工程中普遍出现的问题。

学习设计模式的必要性

设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解。
正确使用设计模式具有以下优点。

  • 可以提高程序员的思维能力、编程能力和设计能力。
  • 使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高,从而缩短软件的开发周期。
  • 使设计的代码可重用性高、可读性强、可靠性高、灵活性好、可维护性强。

我们这里只涉及常见的23种设计模式,其他设计模式先不介绍。
首先我们要了解前置知识:七 条软件设计原则

七大软件设计原则

在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据6条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。

开闭原则

开闭原则的含义是:当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。

所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。
想要达到这样的效果,我们需要使用接口和抽象类等。

单一职责原则(Single Responsibility Principle)

一个类应该只有一个发生变化的原因。
不要存在多于一个导致类变更的原因,也就是说每个类应该实现单一的职责,否则就应该把类拆分。

里氏代换原则(Liskov Substitution Principle)

所有引用基类的地方必须能透明地使用其子类的对象。

也就是在使用基类的地方,替换成它的子类程序没有任何问题。

以JDK的集合框架为例,List接口的定义为有序集合,List接口有多个派生类,比如大家耳熟能详的ArrayList, LinkedList。那当某个方法参数或变量是List接口类型时,既可以是ArrayList的实现, 也可以是LinkedList的实现,这就是替换。

举个简单的例子:

public String getFirst(List<String> values) {
        return values.get(0);
}

对于getFirst方法,接受一个List接口类型的参数,那既可以传递一个ArrayList类型的参数:

List<String> values = new ArrayList<>();
values.add("a");
values.add("b");
String firstValue = getFirst(values);

又可以接收一个LinkedList参数:

List<String> values = new LinkedList<>();
values.add("a");
values.add("b");
String firstValue = getFirst(values);

替换之后行为没有发生变化,这就符合里氏代换原则。
面向接口编程有一个重要的点:一切基于基类或接口定义的行为,来实现子类。

依赖倒转原则 (Dependence Inversion Principle)

依赖倒置原则的原始定义为:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。
就是我们常说的面对接口编程

接口隔离原则

接口隔离原则(Interface Segregation Principle,ISP) 要求程序员尽量将臃肿庞大的接口拆分成更小的和更具体的接口,让接口中只包含客户感兴趣的方法。. 2002 年罗伯特·C.马丁给“接口隔离原则”的定义是:客户端不应该被迫依赖于它不使用的方法。

迪米特法则(最少知道原则)(Law of Demeter)

迪米特法则的目的在于降低类与类之间的耦合。由于每个类尽量减少对其他类的依赖,因此,很容易使得系统的功能模块功能独立,是的相互间存在尽可能少的依赖关系。
迪米特法则要求类与类之间尽量不直接通信,如果类之间需要通信就通过第三方转发的方式。
看一个场景:
明星和演艺公司。
明星和演绎公司不直接接触。
找个经济人做中介来接触。
每当有演出公司通知经纪人,经纪人在转发给明星。
这样明星和公司不直接接触,降低了耦合。

合成复用原则(Composite Reuse Principle)

尽量的使用 合成 和聚合,而不是继承关系达到 复用 的目的。

合成复用原则是通过将已有的对象纳入新对象中,作为新对象的成员对象来实现的,新对象可以调用已有对象的功能,从而达到复用。

如果要使用继承关系,则必须严格遵循里氏替换原则。合成复用原则同里氏替换原则相辅相成的,两者都是开闭原则的具体实现规范。

设计模式就是这些设计原则的具体实现。

23种设计模式分类

  • 创建型模式
    用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。
    1. 单例、
    2. 原型、
    3. 工厂方法
    4. 抽象工厂
    5. 建造者
  • 结构型模式
    用于描述如何将类或对象按某种布局组成更大的结构。
    1. 代理
    2. 适配器
    3. 桥接
    4. 装饰
    5. 外观
    6. 享元
    7. 组合
  • 行为型模式
    用于描述类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务,以及怎样分配职责。
    1. 模板方法
    2. 策略
    3. 命令
    4. 职责链
    5. 状态
    6. 观察者
    7. 中介者
    8. 迭代器
    9. 访问者
    10. 备忘录
    11. 解释器

接下来我们开始一个个学习吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸟猫喵喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值