自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 备忘录模式(Memento)

定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。图示:Originator(发起者): 负责创建一个备忘录,并且可以记录、恢复自身的内部状态。可以根据需要决定Memento保存自身的那些内部状态Memento(备忘录): 用于存储Originator的状态,防止Originator以外的的对象访问MementoCaretaker( 备忘录管理者): ...

2020-04-28 20:00:41 128

原创 状态模式(State)

定义:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。图示:● 环境(Context) (上下文):定义客户端所感兴趣的接口,并且保留一个具体状态类的实例。这个具体状态类的实例给出此环境对象的现有状...

2020-04-28 19:41:15 187

原创 访问者模式(Visitor)

定义:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。本质:将数据和作用于数据上的某种/些特定操作分离开来。为ADT预留一个将来可扩展功能的“接入点”,外部实现的功能代码可以在不改变ADT本身的情况下通过delegation接入ADT。举例说明:/* Abstract element interface (visitable)...

2020-04-27 17:07:40 470

原创 观察者模式(Observer)

定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。举例说明:public class Subject { private List<Observer> observers = new ArrayList<Observer>(); private int state; public int getSta...

2020-04-27 16:18:37 122

原创 代理模式(Proxy)

定义:为其他对象提供一种代理以控制对这个对象的访问。举例说明:public interface Image { void display();}public class RealImage implements Image { private String fileName; public RealImage(String fileName){ this.fileName ...

2020-04-27 15:41:31 165

原创 工厂方法(actory Method)与抽象工厂方法(Abstract Factory)

首先来看工厂方法(actory Method):定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。工厂方法的目的是使得创建对象和使用对象是分离的,并且客户端总是引用抽象工厂和抽象产品:举例说明:首先定义一个工厂接口:public interface Factory { public Product create...

2020-04-27 15:26:17 261

原创 接口隔离原则(Interface Segregation Principle)

定义:客户端不应该依赖它不需要的接口类间的依赖关系应该建立在最小的接口上补充说明:实例接口(Object Interface): 在Java中声明一个类,然后用new关键字产生一个实例,是对一个类型的事物的描述,这就是一种接口。或许我们乍一看会有点懵,怎么和我们原来学习的接口不一样呢,其实我们这样想,我们都知道,在Java中有一个Class类,表示正在运行的类和接口,换句话说每一个正在运行...

2020-04-22 18:16:42 539

原创 依赖倒置原则(Dependence Inversion Principle)

定义:1、高层模块不应该依赖底层模块,二者都应该依赖抽象。2、抽象不应该依赖细节,细节应该依赖抽象。3、依赖倒置的中心思想是面向接口编程。4、依赖倒置原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比以细节为基础搭建的架构要稳定的多。5、使用接口或抽象类的目的是指定好规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类来完成。说明:...

2020-04-22 16:57:28 344 1

原创 开闭原则(Open Close Principle)

定义:一个软件实体如类,模块和函数应该对扩展开放,对修改关闭。即一个软件实体应该通过扩展来实现变化,而不是通过修改已有的代码来实现变化。软件实体应该包括以下几个部分:1、项目或软件产品中按照一定的逻辑规则划分的模块2、抽象和类3、方法使用:1.抽象约束通过接口或抽象类约束扩展,对扩展进行边界限定,不允许出现在接口或抽象类中不存在的public方法参数类型、引用对象尽量使用接口或抽...

2020-04-22 16:24:35 302

原创 单一职责原则(Single Responsibility Principle)

定义:一个类只负责一个功能领域中的相应职责,应该有且仅有一个原因引起类的变更。实际中,一个类越复杂,可能被复用的可能性越小,变动代码也就越可能有意想不到的错误。这时候我们就需要用到单一职责原则了,这一原则可以说是最为简单的原则也是最难以实现的原则,究其原因在于代码的功能之间的关系较为繁琐细致而且在面对变化时可能原本单一的职责会划分为粒度更小的两种职责,这时候仅仅为了满足单一职责原则反而得不尝试...

2020-04-22 15:58:53 590

原创 设计模式之模板模式(Template)与迭代器模式(Iterator)

我们首先来看模板模式(Template):定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。核心思想:父类定义骨架,子类实现某些细节。使用场景:1、有多个子类共有的方法,且逻辑相同。2、重要的、复杂的方法,可以考虑作为模板方法。注意事项:为了防止子类重写父类的骨架方法,可以在父类中对骨架方法使用final。...

2020-04-21 20:38:58 422

原创 设计模式之策略模式(Strategy)

定义:定义一系列的算法,把它们一个个封装起来到一个对象中,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化,在运行时灵活的使用其中的一个算法。在一个方法中,流程是确定的,但是,某些关键步骤的算法依赖调用方传入的策略,这样,传入不同的策略,即可获得不同的结果,大大增强了系统的灵活性。图示:Strategy接口: 定义每个策略或算法必须具有的方法和属性。ConcreteStr...

2020-04-21 19:55:20 131

原创 设计模式之适配器模式(Adapter)与外观模式(Facade)

我们首先来看适配器模式:定义:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。如果一个接口需要B接口,但是待传入的对象却是A接口,无法正常调用工作,该怎么办?这时候适配器模式就体现出其作用了:Adapter模式可以将一个A接口转换为B接口,使得新的对象符合B接口规范。步骤:1.实现目标接口;2.内部持有一个待转换接口的引用;3.在...

2020-04-20 21:45:44 277

原创 设计模式之装饰器模式(Decorator)

在学习这一节之前其实大家已经或多或少的接触过装饰器模式了,比如IO中的InputStream、FileInputStream、ServletInputStream等等其组合使用时就是装饰器模式了,比如下面的代码就是一个例子:InputStream input = new GZIPInputStream( // 第二层装饰 new BufferedI...

2020-04-20 21:21:33 141

原创 合成复用原则(Composite Reuse Principle)

合成复用原则涉及的一个重要概念就是委派(委托):委派——一个对象请求另一个对象的功能,是实现复用的一种常见形式,与继承相比,委派更多是在object层面而不是class的层面。如果子类只需要复用父类的一小部分功能,可以不通过继承而是使用委派机制来实现,从而避免大量无用方法。合成/聚合复用原则定义:在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到...

2020-04-17 16:50:02 882

原创 里氏替换原则(Liskov Substitution Principle)

关于LSP(里氏替换原则)这里做一些简要的说明以帮助理解。LSP的引入:父类(基类)中已经实现好的方法已经拥有了该方法相关的行为规范和契约,如果子类在添加新功能之外任意的修改父类中已经实现好的方法就会破坏父类中的规范与契约,导致在引用父类的地方如果使用子类的实现,可能会导致原有的功能遭到破坏,与此同时,整个程序的继承树此时也已经被破坏。而LSP就是防止这种可能导致故障情况出现而提出的。里氏替...

2020-04-17 12:02:27 236

原创 课件中有关ADT的讲解(摘录自学长的翻译中的部分内容)

抽象:规格说明使得使⽤者只需要弄懂规格说明并遵守前置条件,⽽不是让他们去弄懂底层的代码实现模块化:单元测试和规格说明都帮助了将⽅法模块化封装:⽅法中的局部变量都是被封装的,因为他们仅仅可以在⽅法内部使⽤。与此相对的是全局变量和指向 可变对象的别名,它们会对封装带来很⼤损害。信息隐藏:规格说明就是⼀种信息隐藏,它使得实现者可以⾃由的更改实现代码。功能分离:⼀个规格说明应该是逻辑明确的,即它不...

2020-04-15 21:10:07 252

原创 Lab2摘要

有关代码的截图不再提供,仅发布设计思路:1实验目标概述本次实验训练抽象数据类型(ADT)的设计、规约、测试,并使用面向对象编程(OOP)技术实现ADT。具体来说:针对给定的应用问题,从问题描述中识别所需的ADT;设计ADT规约(pre-condition、post-condition)并评估规约的质量;根据ADT的规约设计测试用例;ADT的泛型化;根据规约设计ADT的多种不...

2020-04-15 20:52:42 188

原创 Lab1实验摘要

2020-04-15 20:49:12 147

原创 Eclipse中将代码提交至本地仓库

第一步:windows–perferences–Team–Git–Configuration进行配置之后在项目出点击右键,选择team中的share project第一次操作时:在其中选择git,然后next,接下来选择创建仓库或者选择已创建的仓库,同时选择要提交的代码;这一部分操作简单,不截图了如果是之后的下一个项目,点击share project选择或者创建仓库即可之后再次...

2020-04-15 20:39:38 806

原创 关于不同IDE的关于warning的问题

在进行实验时,有几个困扰本人很久的问题,其中一个就是不同IDE关于代码的warning提示并不相同,即使是相同的代码,可能在不同的IDE中warning提示并不相同,这其中有一些是由于IDE本身引起的,另一些则因为jdk版本导致。先说一下jdk版本的问题:以泛型为例,有关的泛型的引入在1.5之后,所以如果你的jdk版本早于1.5则会爆error,warning也是同样的道理,不和语法的语句可能在...

2020-04-15 20:18:59 350

原创 第一周软件构造课总结于感想

第一周软件构造课感想:

2020-02-28 17:43:22 189

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除