




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、设计模式1 UML建模(几个重要图)22.1 UML关系表示(实现、泛化、依赖、关联)实现:(类与接口)泛化:(子类与父类,一般与具体,继承)依赖:(一个类作为另一个类的函数参数或者函数返回值)关联:(一般关联,一个类是另一个类的成员变量)聚合:(关联的特例,表示整体与部分关系,has-a)组合:(关联的特例,整体与部分关系,contains-a,比组合联系更强)1.2 用例图站在用户的角度把整个软件系统描绘出来=把客户的需求描述下来,需求分析参与者、用例、关系(泛化=继承、包含、扩展)1.3 类图类名、属性、方法类和类之间的关系:实现(接口)、泛化(继承)、依赖(一个类是另外一个类的参数或者
2、函数返回值)、关联(一般关联、聚合、组合,一个类是另一个类的成员变量)一般关联:一个类是另一个类的成员变量,两者是平行关系;聚合:也属于关联,也是通过成员变量来实现,不过两者之间是属于整体和部分的关系,汽车和发动机;组合:是一种比聚合还要强的关系,代表生命的整体和部分的关系,人和五脏六腑。1.4 时序图用来描述对象和对象之间的消息传递的时间顺序。三要素:对象、生命线、消息1.5 活动图活动图的本质就是流程图,用于描述系统的活动。有两种表示方式(1):分支结构,常规流程图;(2):带泳道的流程图(描述某一流程,以对象进行分割)2 设计模式(方法:记案例、UML图)2.1 前言模式:固定的套路;学
3、习设计模式,就是学习别人归纳整理的固定套路,也就是拿来主义;多态是设计模式的基础,虚函数;(多态的含义,实现原理)创建型设计模式,结构型设计模式,行为型设计模式(实现多态的原理是:C+编译器为每一个含有虚函数的子类和父类提前设置了一个VPTR指针,通过VPTR指针找虚函数表,根据虚函数表找后来人写的代码去执行。)2.2 设计模式基本原则(1)开放封闭原则:类的改动是通过增加代码进行的,而不是修改源代码。对扩展开放,对修改关闭(2)依赖倒置原则:依赖于抽象(接口),不要依赖具体的实现(类),也就是针对接口编程。(电脑组装,第三方产品,业界把接口已经抽象好了)(3)迪米特法则:一个对象应当对其他对
4、象尽可能少的了解,从而降低各个对象之间的耦合,提高系统的可维护性(否则说明类太复杂,需要拆分)。例如一个程序中,各个模块之间相互调用时,通常会提供一个统一的接口来实现(某人、朋友、陌生人,那么陌生人和某人之间当达到一定条件时,可以通过接口来调用)。这样其他模块就不需要了解另外一个模块的内部结构,当一个模块内部的实现发生变化时,不会影响其他模块的使用。2.3 创建型设计模式(记案例)通常和对象的创建有关,涉及到对象实例化;2.3.1 单例模式保证一个类只能有一个实例存在,同时提供能对该实例加以访问的全局访问方法。什么时候使用单例模式呢?(在应用系统中,多个线程之间,只要初始化一次socket资源
5、,多个线程同时使用。多线程访问一个资源时需要加锁)有懒汉式和饿汉式之分首先,单例模式使类在程序生命周期的任何时刻都只有一个实例,然后,单例的构造函数是私有的,外部程序如果想要访问这个单例类的话,必须通过GetInstance()来请求(注意是请求)得到这个单例类的实例。私有构造函数只能在函数内部调用,外部不能实例化,所以私有构造函数可以防止该类在外部被实例化。当懒汉式遇上多线程(构造函数被执行了多次):一般情况下需要进行线程同步,加锁、解锁;主进程中创建线程后,程序就有了分支,多个路径同时执行。2.3.2 简单工厂模式简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例,通过定义一个类来创
6、建其他类的实例。角色:工厂角色(负责生产产品)、抽象角色、具体产品角色缺点:如果增加一个类的话,需要修改代码,不符合开闭原则。Class CreateOperateSwitch(operate) Case “+”: Case “-”: .2.3.3 工厂模式()在简单工厂模式的基础上进行改进,水果类、香蕉、苹果,抽象工厂、生产香蕉的工厂、生产苹果的工厂,如果需要生产橘子呢?只要增加相关的句子类与相应工厂的代码即可。可以无限的扩充,即面向抽象类编程。创建对象的接口,让子类去决定具体实例化的对象,把简单的内部逻辑判断移到了客户端代码。工厂方法克服了简单工厂违背开放-封闭原则的缺点,又保持了封装对象
7、创建过程的优点。2.3.4 抽象工厂简单工厂模式、工厂模式只能生产单一产品,但是有时需要生产一组产品?HOW?即:工厂模式可以生产一个产品;抽象工厂模式可以生产一个产品族;给客户端提供一个接口,可以创建多个产品族中的产品对象。实现:抽象工厂可以生产一个产品族,也是面向抽象类编程。工厂模式:要么生产香蕉、要么生产苹果、要么生产西红柿,但是不能同时生产一个产品组;抽象工厂模式:能够同时生产一个产品组,比如生产北方的苹果/香蕉/西红柿,南方的苹果/香蕉/西红柿。2.3.5 建造者模式我们在做项目时,经常会有一个共识:需求是无底洞,是无理性的解决这么一个问题:楼房是千差万别的,楼房的外形,层数,内部房
8、间的数量,房间的装饰都不一样。但是对于建造者来说,抽象出来的建筑流程是确定的。因为建筑一座楼房,都可以归纳为几个步骤:1打桩、2建地基、3搭框架、4内部建设。同理,建造者设计模式也是基于这样的概念而生的,这个设计模式用来解决什么样的情况呢:即流程不变,但每个流程实现的具体细节是会变化的。建房子:设计师、工程队(写字楼、别墅、平房)、房子指挥者也就是设计师角色用于根据用户选择相应的工程队适用情况:一个对象的构建非常复杂,将一个对象的构建和对象的表示进行分离,使得同样的构建过程可以创建不同的表示。使用多个简单的对象一步一步构建成一个复杂的对象。主要解决在软件系统中,有时候面临着"一个复杂
9、对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。何时使用:一些基本部件不会变,而其组合经常变化的时候。帮助系统去创建、组合和表示实例对象。工厂模式关注的是整个产品,建造者模式关注的是产品各组成部分的创建过程。2.4 结构型设计模式让类和类进行组合获取更大的结构,重点学习代理、装饰、适配器、桥接模式。2.4.1 代理模式所谓代理:a中包含b类,a、b类都实现了协议类;当当网卖书相当于替实体店卖书,同时还可以提供促销活动。2.4.2 装饰模式装饰模式:把要添加的附加功能分别放在单
10、独的类中,并让这个类包含它要修饰的对象,这样,当需要执行时,客户端可以有选择地、按顺序地使用装饰功能包装对象。是继承关系的一种替换方法。动态的给一个对象添加一些额外的功能,就增加的功能来说,此模式比生成子类(继承)更加灵活。对一个类进行功能性增强方法:(1):修改类;(2):继承;(3)装饰;装饰者模式顾名思义就是用来装饰物件的,其实像我们生活中礼品的装饰就是将一个礼物包裹的更加赏心悦目,更符合要送给对象和心意。底层类库使用场景:对象由主体+许多可选的部件或者功能构成,使用继承或者接口会产生很多类,且很难扩展。例如,现在需要一个汉堡,主体是鸡腿堡,可以选择添加生菜、酱、辣椒等等许多其他的配料,
11、这种情况下就可以使用装饰者模式。2.4.4 适配器模式()将一个类的接口转换成客户希望使用的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。场景:电源适配器(把220V的电压转化为18V的电压)Adapter继承Adaptee类,实现Target接口。2.4.5 桥接模式()最经典实例:JDBC比较好的讲解:解释:在软件系统中,某些类型由于自身的逻辑,它具有两个或两个以上的维度变化(从不同的角度分析,多维度),那么如何应对这种“多维度的变化”呢?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度呢?场景:考虑这样
12、一个实际的业务功能:发送提示消息。基本上所有带业务流程处理的系统都会有这样的功能,比如某人有新的工作了,需要发送一条消息提示他。从业务上看,消息又分成普通消息、加急消息和特急消息多种,不同的消息类型,业务功能处理是不一样的,比如加急消息是在消息上添加加急,而特急消息除了添加特急外,还会做一条催促的记录,多久不完成会继续催促。从发送消息的手段上看,又有系统内短消息、手机短消息、邮件等等。现在要实现这样的发送提示消息的功能,该如何实现呢?案例讲解:消息先只是实现发送普通消息,发送的方式先实现系统内短消息和邮件。(消息为接口)添加发送加急消息的功能,同样是系统内短消息和邮件的方式。如果继续向下来添加
13、功能实现?如果要新加入一种消息的发送方式,那么会要求所有的消息种类,都要加入这种新的发送方式的实现。要是考虑业务功能上再扩展一下呢?比如:要求实现群发消息,也就是一次可以发送多条消息,这就意味着很多地方都得修改,太恐怖了。桥接模式原因分析:现在出现问题的根本原因,就在于消息的抽象和实现是混杂在一起的,这就导致了,一个纬度的变化,会引起另一个纬度进行相应的变化,从而使得程序扩展起来非常困难。解决方案:要想解决这个问题,就必须把这两个纬度分开,也就是将抽象(定义)部分和实现(行为)部分分离,让它们相互独立,这样就可以实现独立的变化,使扩展变得简单。(多和多之间的组合)通常在抽象对象(Abstrac
14、tMessage)里面,要维护一个实现部分的对象(MessageImplementor)引用,在抽象对象里面的方法,需要调用实现部分的对象来完成。这个对象里面的方法,通常都是跟具体的业务相关的方法。(这也是抽象部分和接口部分的关系是聚合关系)。桥接模式将继承关系转换为关联关系,从而降低了类与类之间的耦合,减少了代码编写量。将两个角色之间的继承关系改为聚合关系,就是将它们之间的强关联改换成为弱关联。因此,桥梁模式中的所谓脱耦,就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以相对独立地变化。这就是桥梁模式的用意。2.4.6、组合模式、外观模式、享元模式2.5
15、、行为型模式(11种)2.5.1、观察者模式2.5.2、策略模式()(可以联想到联合作战项目)定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换。策略模式把对象本身和运算规则区分开来,其功能非常强大注意策略模式和工厂模式的区别:策略(Strategy)模式在结构上与工厂模式类似,唯一的区别是工厂模式实例化一个产品的操作是在服务端来做的,换句话说客户端传达给服务端的只是某种标识(加、减、乘、除),服务端根据该标识实例化一个对象。而策略模式的客户端传达给服务端的是一个实例,服务端只是将该实例拿过去在服务端的环境里执行该实例的方法。工厂模式和策略模式的区别在于实例化一个对象的位置不同,对
16、工厂模式而言,实例化对象是放在服务端的,即放在了工厂类里面;3、学习过程中的问题3.1、针对接口编程,而不是针对实现编程。首先我们需要理解什么是接口,什么是实现。接口是定义行为,只是定义我们要做什么事情,至于如何做这些事情是由接口的实现来做的,当我们定义接口的时候无需关心这个行为如何实现,只要知道有这个接口就可以。(知道干什么,而不要知道具体怎么干)别人在调用你的代码的时候,都是调用你的接口对象,至于如何实现,对别人是透明的。接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此接口是对抽象的抽象。接口就是标准,就是承诺。针对接口编程,不要针对具体编程是依赖倒转原则的另外一种表述。针对接口编程又称为面向接口编程,针对接口编程就是要先设计一系列的接口,把设计和实现分离开,使用时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 会议赞助协议合同范本
- 农村鱼塘转让合同范本
- 加盟合同范本烤鸭
- 劳务合同范本拼音写
- 上海理财合同范本
- 包子店员工合同范本
- 劳务补助合同范本
- 修补围网合同范本
- 公积金担保合同范本
- 出租医疗服务合同范本
- 2025年初中主题班会课件:好习惯成就好人生
- 学校教职工代表大会全套会议会务资料汇编
- 新部编版小学六年级下册语文第二单元测试卷及答案
- 2025年山东传媒职业学院高职单招高职单招英语2016-2024历年频考点试题含答案解析
- 《中医基础理论》课件-中医学理论体系的基本特点-整体观念
- 2025年广东省深圳法院招聘书记员招聘144人历年高频重点提升(共500题)附带答案详解
- 2025年人教版新教材数学一年级下册教学计划(含进度表)
- 2025年春西师版一年级下册数学教学计划
- 课题申报书:“四新”视域下地方高校学科建设与人才培养研究
- 企业员工退休管理规章制度(3篇)
- 中国干眼临床诊疗专家共识(2024年)解读
评论
0/150
提交评论