设计模式 Design Pattern
零.引子
1.设计模式来龙去脉
1.早期编程中,发现有很多代码重复出现,于是咱就想,能不能编程之前设计一下,以便尽量只写一遍代码,之后只要重复利用?
2.设计模式思想 最早来源于建筑学领域,由著名建筑学家Christopher Alexander提出:
“每个模式都描述了在环境中反复出现的(某类)问题,并以一种恰当的方式描述该问题的核心解决方案,以使该方案可以千百遍地被重复利用”
3.说白了,核心思想是:设计复用
4.设计模式在计算机学科中处于一个什么位置呢?目前我不知道,希望大佬指点。
2.分类
三大类:创建型,结构型,行为型;大类下有若干小类。
(1)创建型:解决对象创建机制
(2)结构型:将不同的类和对象组合在一起,形成更大的结构体
(3)行为型:解释对象之间如何交互
3.参考
严谨定义 参考《设计模式与体系结构》(孙玉山)、《大话设计模式》(程杰)
一.创建型
抽象工厂模式
1.应用
(1)当工厂模式中的工厂类不断增加,类会太多,虽然使用工厂模式符合开闭原则,但不方便管理。于是引入了抽象工厂模式。
(2)比如在工厂模式中,有鞋子、裤子、衬衫、帽子;其中又有男装、女装。
①当我们新加一种服装,卫衣。选择工厂模式比较好。
因为此时抽象工厂模式不符合开闭 原则。
②当我们新加一种性别,中性。选择抽象工厂模式比较好。(以下不提产品类)
因为如果用工厂模式,需要在每一个工厂接口(鞋子等)下方加一个中性服装;
而使用抽象工厂模式,只需要在工厂接口(男女)下方加一个中性类。
2.是什么
待补充。
本质上,抽象工厂模式也是工厂模式,它们二者区别只不过是分类的方式不同
比如,有人类这个东西。
工厂根据人的器官分类,增加一个新的器官就符合开闭原则;
而抽象工厂根据人的肤色分类,增加一个新的肤色人类就符合开闭原则;
选择谁,需要根据具体情况分析。
二.结构型
适配器模式
1.应用
如果我们已经写好了一个类,里面有一个计算面积的函数。
现在,我需要一个同样功能的函数,但是输入的参数格式不同怎么办?
这个时候,适配器能用上了。
2.是什么
它的作用就像是,
有一个水管直径5cm,另一个水管直径10cm,它们功能都是传水,
适配器就是连接两根水管的中介,作用就是继续用旧水管时,解决新旧水管直径不匹配的问题。
适配器模式分为:
1.类适配器。
适配器继承旧的类,就是不管需不需要,一股脑全拿来。
2.对象适配器。
适配器调用旧的类的函数,就是需要什么,就拿来什么。
显然,对象适配器更好。
外观模式
1.应用
给你一个51单片机(就是纯硬件),让你需要什么基本功能,自己写程序,自己烧写进去;
或者给你一个win10的pc,让你直接能用基本功能。
你说哪个更方便,更好用?当然是后者。单片机和你是直接交互的,而pc机和你之间有操作系统。外观模式是为了让你不用直接管硬件,使你更方便管理。这样的思想应用到写代码中,main()函数就不用写管理的细节;你写一个Manager类,它帮你调用各种函数。这不是让你代码逻辑更清晰了吗,以后想修改时,也容易拓展。
2.是什么
外观模式的思想就类似在硬件和用户之间加一层操作系统,间接管理。
三.行为型
策略模式
1.应用
(1)要干同一件事情,但实现算法有多种。(顾名思义,策略模式因此叫策略模式)
(2)特别是有很多种算法的情况,或者是将来可能拓展算法的情况
2.是什么
是一种定义一系列算法的方法,从概念上看,所有算法完成的都是相同工作,只是实现不同,它可以以相同的方式调用所有的算法,减少各种算法类与使用算法类之间的耦合。
访问者模式
1.应用
适用于数据结构稳定的系统
2.是什么
是一种 将数据的结构和操作解耦的模式