![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
计算机基础
文章平均质量分 56
d0d0bird
这个作者很懒,什么都没留下…
展开
-
桥接器模式
桥接器模式桥接器起着连接两边的作用,将抽象部分和实现部分分离,使它们都可以独立的进行变化。让类的功能层次和实现层次相分离,使两者能独立变化,在两者之间搭建桥梁,实现桥接。如果一个事物有多个维度的属性,我们该如果表示因这些维度不同而衍生出的多种不同的类呢?如果是使用继承的方式,每多一个维度,由于是乘数关系,会导致类数量爆炸。用图形的表示类举例,我们的图形有四种形状,三种颜色,如果要表示所有的状态的图形,使用继承的方式就得要12种类来。如下图:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存原创 2021-08-24 14:50:39 · 169 阅读 · 0 评论 -
MySQL 50道题
MySQL 50道题最近学了下MySql,准备学习下这50道题,留作记录。注意:MySQL5.7以后会默认开启sql_mode=only_full_group_by,会导致group by 操作时select 后只能跟group by 之后的字段,可以使用select @@sql_mode查询。win10系统下,找到MySQL安装目录,修改my.ini文件,在[mysqld]之后配置sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE转载 2021-08-24 14:50:03 · 193 阅读 · 0 评论 -
设计模式--模板方法模式
模板方法模式定义一个操作中的算法框架,将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。1.使用场景定义一个算法骨架,规定好具体执行流程,但每个步骤可以留作抽象方法,留给子类来实现。在重构时,将相同的代码抽取到父类中,通过钩子函数约束其行为。2.角色AbsTemplate 抽象类,定义了一套算法框架ConcreteA 具体实现类A3.实践// 抽象模板public abstract class AbstractComputer { pr原创 2021-08-12 13:51:38 · 56 阅读 · 0 评论 -
设计模式--策略模式
策略模式策略模式和状态模式很相似,但策略模式中的策略是一系列相似的算法(相似指,输入参数类型一致,输出参数类型一致),将算法封装后,通过注入的方式实现算法的切换。让算法实现独立于客户端而变化。1. 使用场景如果同一类型的问题有多重解决办法,仅仅是具体行为有差别,则可以通过策略模式来动态改变,具体解决方案。2. 角色Context 所谓上下文环境,就是行为主题,通过给山下文注入不同策略来更换具体策略实现。Strategy 抽象策略类ConcreteStrategy 具体策略实现3. 实践原创 2021-08-12 13:51:01 · 62 阅读 · 0 评论 -
设计模式--状态模式
状态模式类对象的状态不同,则相同行为(同名方法)的具体实现不同;在外部看来,一个对象会因为状态不同,相同的行为会有不同的表现。状态决定行为,状态不同则行为不同。1. 使用场景当一个对象的行为需要跟随运行时状态的改变而发生变化时,可使用该模式。当代码中有大量与状态相关的条件语句(if else switch-case),举个例子,一个运动员有不正常状态,正常状态,超常状态,对于投篮这个动作,不同状态会有不同的表现,不仅如此,吃饭、睡觉、训练都有不同的表现,投篮(){if(正常状态){ 正常状态原创 2021-08-12 13:50:22 · 79 阅读 · 0 评论 -
设计模式--观察者模式
观察者模式该模式下被观察者和观察者对象形成一对多的关系,当被观察者发生改变时,所有的观察者都会接收到通知。1. 使用场景当一个对象的改变需要通知给其他对象,而又不知道其他对象是谁、有多少。2. 角色Subject 抽象主题,被观察者(Observable),使用集合存储所有抽象观察者,并提供增加删除观察者的方法。ConcreteSubject 具体主题,具体被观察者,实现了给具体观察者通知状态改变的逻辑。Observer 抽象观察者,定义了在得到通知后进行更新的接口方法。ConcreteO转载 2021-08-12 13:49:33 · 52 阅读 · 0 评论 -
设计模式--备忘录模式
备忘录模式用于在不破坏对象封装(保持所有属性为私有状态,不提供对外访问方法)的情况下,捕获一个对象的状态,并在该对象之外保存状态。1. 使用场景需要保存一个对象在某一时刻的状态或部分状态。2. 角色Originator 需要保存状态的对象,可以创建备忘录,记录并恢复自身状态。Memento 备忘录角色,存储了Originator对象,防止其他对象访问OriginatorCaretaker 负责存储备忘录对象,不能对备忘录的内容进行操作和处理3. 实践// Originator类,pu原创 2021-08-12 13:48:52 · 64 阅读 · 0 评论 -
设计模式--中介者模式
中介者模式中介者模式包装了多个对象之间的一系列交互,使的对象之间耦合松散,对象不用再持有其他对象的引用,多个对象之间相互调用形成的网状结构(多对多),可以变为围绕着中介者形成的星型结构(一对多)。一个对象的修改不会影响其他对象的调用。1. 使用场景一组对象之间需要进行复杂的交互,或想通过一个中介者来封装多个类中的行为,而又不想生成太多的子类。2. 角色Mediator 抽象中介者,定义了同事对象到交互对象的接口。ConcreteMediator 具体中介者角色,继承抽象中介者,负责接收同事发原创 2021-08-12 13:48:10 · 57 阅读 · 0 评论 -
设计模式--迭代器模式
迭代器模式也称为游标模式,用于顺序访问集合对象的元素,如java中List、Map、数组等。如果由容器提供遍历访问,则容器类承担了太多功能,如果让用户在外部实现遍历,则需要把容器内部的实现细节暴露出去。 使用迭代器可以解决上述问题。1. 使用场景顺序遍历容器对象时使用。2. 角色Iterator 迭代器接口,定义了访问和遍历元素的接口方法。Concrete Iterator 具体迭代器类,实现迭代器类,记录遍历的当前位置。Aggregate 聚合容器接口,定义了创建和对外提供具体迭代器的接口原创 2021-08-12 13:47:32 · 59 阅读 · 0 评论 -
设计模式--责任链模式
责任链模式将多个处理者穿成一条链,使得每个处理者都有机会进行事件处理。 事件对象沿着责任链依次向下传递,直到有处理者处理它为止。1. 适用场景多个处理者都可以处理事件对象,但具体由哪个处理者处理,需要运行时动态决定。事件和处理者应该有个等级或权限的字段,匹配则直接处理,不匹配则传递给下一个处理者。当请求不知道要交个哪个处理者处理时,可以交由责任链自己决定。当需要多个处理者共同处理同一个事件时。2. 角色AbstractHandler 抽象处理者:定义了处理者传递或处理事件的规则,抽象处原创 2021-08-12 13:46:33 · 70 阅读 · 0 评论 -
设计模式--代理模式
代理模式代理就是请别人帮你办事,但是别人只能在你委托的事情上代表你,不会拥有其他权限。代理更多是通过接口限定功能。1. 使用场景客户端不想直接访问某对象(保护代理),或直接访问某对象时有困难(远程代理),就可以使用一个代理对象来实现间接访问。真实对象和代理对象必须实现相同的接口,才能让客户端实现透明的访问。2. 角色Subject 抽象主题类,用于声明真实对象和代理对象共同的接口方法。RealSubject 真实主题类,被代理的对象,客户端通过代理对象间接访问该对象中方法。ProxySubj原创 2021-08-12 13:45:32 · 47 阅读 · 0 评论 -
设计模式--享元模式
享元模式享元模式尝试重用现有的对象,再无法重用时才会创建对象,这样可以减少内存占用和提高性能。享元对象中可以共享的是内部状态,不能共享的是外部状态。举例:打印火车票:车票上车辆编号是固定的,始发站点和到达站点的组合也是有限且固定的,不同站点之间的时间也是相对固定的,车票价格也是相对固定的。 这些都属于内部状态。而乘客名称、乘客身份证号是不固定的。如果每张票都要新建对象进行打印,那1000张票就得1000个对象。如果使用享元模式,使用map来存储车票对象,起点终点作为键,起点终点相同的车票对象作为值原创 2021-08-10 19:33:43 · 73 阅读 · 0 评论 -
设计模式--外观模式
外观模式(Facade)向客户端提供一个统一的接口(一个类),隐藏系统的复杂性,对外提供系统功能的简化访问和对现有功能的委托调用。就是做封装,方便使用。1. 使用场景做的一个插件或者系统越来越复杂,功能越来越多,可以通过Facade模式隐藏系统的复杂性,对外提供一个简单的接口。当需要构建一个层次结构的子系统,可以使用Facade模式创建每层的入口点。2. 角色Facade 系统对外提供的统一接口,用户无需感知子系统之间的交互。子系统接口 系统所包含的子系统3. 实践// 1. 定义子系原创 2021-08-10 19:33:09 · 60 阅读 · 0 评论 -
设计模式--装饰器模式
装饰器模式动态的给类添加一些额外的职责,而不是给类添加。这里io类里面大量用到了该模式。1. 使用场景在需要不影响其他对象的情况下,动态透明的给单个对象添加扩展功能。可以在不生成很多子类的情况下扩展类功能。可以动态扩展和撤销功能。2. 角色Component 抽象组件 被装饰对象的原始抽象接口ConcreteComponent 组件具体实现类 即具体的被装饰类Decorator 抽象装饰者 持有被装饰对象的引用,可以进行装饰ConcreteDecorator 装饰着具体实现类 装饰者具体原创 2021-08-10 19:32:26 · 120 阅读 · 0 评论 -
设计模式--组合设计模式
组合设计模式将对象组合成树形结构,以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。1. 使用场景当用户需要忽略组合对象和单个对象的不同,统一使用组合结构中的所有对象时,可使用该模式。当用户调用根节点的方法时,会调用树中所有节点的方法。2. 角色首先树状结构肯定含有根节点、分枝节点、叶子节点。Component 抽象根节点,规定了节点拥有的方法。Composite 定义枝干节点的行为,存储子节点。Leaf 定义叶子节点,定义节点行为。3. 实践安全的组合原创 2021-08-10 19:31:48 · 98 阅读 · 0 评论 -
设计模式--适配器模式
适配器模式将两个不兼容的类融合在一起,将一个类的接口转换为客户希望的另一个类可用的接口,使之可以协同工作。核心就是:适配器继承或依赖已有的对象,实现想要的接口。1 使用场景系统需要使用现有的类,但此类不符合现有的调用要求。需要创建一个可以重复使用的类,将彼此关系不大的类引入到一起工作。需要通过接口转换,将一个类插入另一个类中。如:类A的show方法中接收B类型的参数并调用B类型中dance方法,现在想传入C类型对象,可以创建一个实现了B接口的适配器,将C类型对象传入该适配器,再将该原创 2021-08-10 19:28:18 · 67 阅读 · 0 评论 -
设计模式--原型模式
原型模式在需要重复创建一个复杂对象时,可以使用“克隆”的手段来复制一个对象实例,通过这种方式创建对象称为原型模式。1 使用场景类初始需要消耗较多的数据、硬件资源时;或new对象需要比较繁琐的数据准备和访问权限时;或一个对象会被其他多个对象访问并修改其属性,可拷贝多个对象供其调用,保护性拷贝;使用原型模式创建对象不一定会比new快,所以使用该模式时需要考虑实际效率。浅拷贝2 角色Prototype 抽象类或者接口,具备clone能力。实际中就是 Cloneable 接口,实现该接口则标识该原创 2021-08-10 19:27:14 · 70 阅读 · 0 评论 -
设计模式--建造者模式
建造者模式1.定义Builder模式同样是创建型模式,主要用于创建复杂对象,这里的复杂对象通常由各个部分的子对象构成,由于需求的变化,这些子对象的实现通常会发生剧烈变化,而将这些子对象组合在一起的算法却相对稳定。2.角色抽象产品 : 定义了产品的共有属性和方法,包含各属性的set方法。具体产品 : 具体产品,实现其中的抽象方法。抽象建造者 : 定义了构建产品涉及的配置方法,以及返回对象的create方法。具体建造者 : 实现具体的产品属性配置逻辑,产品对象实例创建,返回对象的create方法原创 2021-08-10 19:26:32 · 54 阅读 · 0 评论 -
设计模式--抽象工厂模式
设计模式–抽象工厂模式1 定义为了给客户端提供一组相关或者相互依赖的对象提供一个接口,而不用指定它们具体的类。定义总是抽象的,记点自己的理解。普通的工厂方法模式,工厂生产的一类相似的产品,比如说生产鞋的工厂、生产裤子的工厂、生产上衣的工厂。通过调用具体工厂类的创建方法并传入参数就可得到我们想要的产品,如生产鞋的具体工厂,传入对应颜色就可以得到指定颜色的鞋子。特点是每个工厂只有一个创建产品的接口方法。抽象工厂模式,工厂生产一组相关的产品,同样拿服饰来举例,之前是单品工厂,现在需要套装,一个工厂中鞋子原创 2021-08-10 19:25:45 · 87 阅读 · 0 评论 -
设计模式--工厂方法
工厂方法模式主要用于生成复杂对象,如果只通过new就可以完事,就不用该模式。这个模式看起来简单,但感觉很难理解,不晓得存在的意义是什么,都知道子类名称了为什么不直接new(或许是实际创建比较复杂,例子都偷懒使用简单的类型,所以可以直接new就完成对象创建了)都拿到Class 自己通过反射也可以直接拿到对象实例,和在工厂中使用反射生成有什么区别?工厂一般来说都生成一类相似的产品,比如说罐头工厂,生产黄桃罐头、杨梅罐头、凤梨罐头。客户通过工厂对外的接口来获得自己想要的产品。对客户而言,需要知道这个产品能原创 2021-08-10 19:24:53 · 69 阅读 · 0 评论 -
设计模式--单例模式
单例模式保证该类只有一个实例,收回了实例的创建权限,通过一个对外接口提供实例对象。使用场景当创建一个对象需要消耗很多资源,或设计要求系统中该类只能有一个实例时使用该模式。实现要点构造函数私有化通过静态方法或枚举返回单例对象,单例类中使用私有静态引用持有本对象确保在获取对象时是线程安全的确保反序列化时不会重新构建该对象实践1.饿汉模式实现简单,但不能做到延迟加载public class SingletonPattern1 implements Serializable {原创 2021-08-10 19:23:58 · 69 阅读 · 0 评论 -
软件工程笔记
第一周 概论软件是什么?计算机系统中的程序及其文档,2.软件有什么特点?软件是无形的,由设计开发而来,较为复杂,开发成本高,易于复制,开发只是部分成本。3.软件的分类?系统软件、支撑软件、应用软件。4.软件发展的三个阶段?个人编程-》小作坊生产-》软件工程 ,产生了质量差、投入高、开发复杂性和成本越来越高的问题。产生软件危机。5.软件工程定义将系统的、规范的、可量化的工程化方法引入到软件的开发、运行和维护过程中。就是用工程化的方法来开发和维护软件,解决软件危机。6.软件开发的本质原创 2021-03-03 15:48:32 · 551 阅读 · 0 评论