设计模式_个人不严谨的理解+严谨定义(更新中)

本文介绍了设计模式的基本概念和分类,包括创建型、结构型和行为型三大类。创建型模式如抽象工厂模式用于解决对象创建问题,结构型模式如适配器模式解决接口不兼容问题,外观模式提供简洁的接口,行为型模式如策略模式用于定义算法族。适配器模式通过中介解决接口不匹配,外观模式为复杂系统提供简单入口,策略模式则允许在运行时选择算法。
摘要由CSDN通过智能技术生成

零.引子

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.是什么

是一种 将数据的结构和操作解耦的模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值