软件构造
旧时故梦
这个作者很懒,什么都没留下…
展开
-
工厂模式和抽象工厂模式
1、工厂模式当client不知道要创建哪一个具体类的实例,或者不想在client代码中指明要具体创建的实例;换句话说就是计划在不同条件下创建不同的实例。在这种情况下,适合使用个工厂模式。工厂模式可以视作是一个虚拟的构造器,主要思路是定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。工厂模式的大致框架如下:(其中不同的Concrete为不同的构造方法,Product为具体构造的实例)//常规情况下,client直接创建实例对象Product p=new P原创 2020-07-09 19:44:26 · 186 阅读 · 0 评论 -
代理模式和适配器模式
1、代理模式(Proxy)代理通常用于网络访问中,允许客户端通过代理与另一个网络终端实现非直接的连接。代理模式的思想就是来自于网络代理,创建一个类来代表现有的一个类,以便向外界提供功能接口,也可以认为是现有类的一个访问层。通常在直接访问类比较麻烦或代价较高的情况下实行。代理模式的结构如下1.1 实例问题背景...原创 2020-07-09 19:44:16 · 682 阅读 · 0 评论 -
观察者模式和访问者模式
1、观察者模式(Observer)原创 2020-07-09 19:44:04 · 1584 阅读 · 0 评论 -
装饰模式和外观模式
装饰模式(Decorator)当我们扩展一个类时,通常使用继承子类的方式,但当扩展的功能比较多的时候,子类会变得比较臃肿,在这种情况下,除了使用delegation以外,还可以使用装饰模式。装饰模式形象地理解就是往类上套上包装进行装饰,也就是说在不改变类结构的前提下,向现有的对象提供新的功能,因此这是一种结构性模式。装饰模式的应用场景:当需要给一个现有类添加附加职责,但该类被隐藏或者该类是终极类或者采用继承方式会产生大量的子类;当对象的功能要求可以动态地添加,也可以再动态地撤销时;Java中装饰模式原创 2020-07-09 19:43:52 · 2549 阅读 · 1 评论 -
策略模式和模板模式
1、策略模式(Strategy)对于一个类来说,如果在不同的情况下实现的算法不同,可以采用策略模式。原创 2020-07-09 19:43:35 · 903 阅读 · 2 评论 -
状态模式和备忘录模式
1 状态模式(State)状态模式把对象的行为包装在不同的状态对象里,每一个状态对象都是一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。和状态模式较相似的操作就是if…else if…else语句,同样都代表了不同条件下的对象行为,但是当条件较多时,或者状态改变较为复杂时,使用状态模式是更好的选择。1.1 状态模式的结构状态模式所涉及到的类包括三种Context;客户端中使用某一具体状态的实例。State;状态接口,定义每个状态所使用的方法。Con原创 2020-06-21 19:52:28 · 246 阅读 · 0 评论 -
Java日志Log4j 2简介
1 Java常用的日志框架以下是五种常用的日志框架,包含官网链接 JDK logging Apache Log4j 2Apache Commons-loggingSLF4Jsyslog-ng2 Log4j日志的levelALL;打开所有等级的日志Trace;追踪每一条执行语句Debug;细粒度下为调试程序Info;粗粒度为反映程序运行主要过程Warn;警告信息Error;错误信息Fatal;导致程序退出的重大错误信息OFF;关闭所有日志信息All----OFF日志等级从原创 2020-06-20 17:35:31 · 190 阅读 · 0 评论 -
断言与防御式编程
1 断言1.1 断言的含义断言:在开发阶段的代码中嵌入,检验某些条件是否成立,如果成立,程序运行正常,否则会抛出AssertionError,程序运行终止断言的使用主要是测试代码的正确性,可以在一定程度上保证代码质量,而且不会影响运行时性能(在实际使用时,assertion都会被disabled)。当出现AssertionError则说明与某些rep与预期出现偏差 ,和抛出异常类似,同样可以在发生错误时输出错误信息。例:assert x>=0;assert x>=0 : "x"原创 2020-06-19 14:41:05 · 360 阅读 · 0 评论 -
健壮性(Robustness)
1、健壮性与正确性健壮性:系统在不正常输入情况下仍能表现正常的程度。处理未期望的行为和错误终止;即使终止执行,也要准确/无歧义地向用户展示错误信息错误信息有助于debug正确性:程序按照spec加以执行的能力,是最重要的质量指标正确性 vs 健壮性正确性,永不给用户错误的结果;健壮性,尽可能保持软件运行而不是总是退出正确性倾向于直接报错,健壮性倾向于容错对外的接口,倾向于健壮性;对内的实现,倾向于正确性2、错误和异常处理在Java的Throwable类中有两个子类:Except原创 2020-06-18 14:33:14 · 10273 阅读 · 0 评论 -
线程安全及其策略
1 线程安全之前介绍了线程之间的交错与竞争,线程之间的竞争条件是作用于同一个mutable数据上的多个线程,彼此之间存在对该数据的访问竞争并导致interleaving,导致post-condition可能被违反,这就导致了线程不安全。线程安全:ADT或方法在多线程中要执行正确,不需要额外的协调。共有四种线程安全的策略,分别为限制数据共享(Confinement),共享不可变数据(Immutability),共享线程安全的可变数据(Thread data type)和同步机制(Synchronizati原创 2020-06-16 15:06:58 · 362 阅读 · 0 评论 -
并行和分布式编程简介(Concurrent and Distributed Programming)
1、并发(Concurrency)1.1 并发的基本概念并发这一部分的内容在CSAPP中有详细的介绍,在软件构造课程多线程这一节简单介绍了这部分内容,可以作为一种复习。并发,通俗的解释就是多个计算在同一时间同时发生。由于摩尔定律的实效,且为了充分利用多核和多处理器,并发使用越来越频繁。应用的场景主要是网络上的多台计算机、一台计算机上的多台应用、一个CPU的多核处理器。并发的两种models:共享内存,在内存中读写共享数据;消息传递,通过channel交换消息。共享内存:两个处理器共享内存;同一台原创 2020-06-13 14:34:18 · 586 阅读 · 0 评论