适配器模式
个人博客
http://www.milovetingting.cn
适配器模式模式介绍适配器模式,是将两个不兼容的类融合在一起,将不同的东西通过一种转换,使得它们能够协作起来。
模式定义适配器模式把一个类的接口变换成客户端的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
使用场景
系统需要使用现有的类,而此类的接口不符合系统的需要,即接口不兼容
想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些将来可能引入的类一起工作
需要一个统一的输出接口,而输入端的类型不可预知
简单使用适配器模式分为两种:
类适配器模式
对象适配器模式
类适配器模式的简单使用定义Target接口
12345public interface VoltTarget { public int getVolt5(); }
定义Adaptee,即需要被转换的对象
123456public class VoltAdaptee { public int getVolt220() { return 220; ...
组合模式
个人博客
http://www.milovetingting.cn
组合模式模式介绍组合模式也称为部分整体模式,结构型设计模式之一,组合模式比较简单,它将一组相似的对象看作一个对象处理,并根据一个树状结构来组合对象,然后提供一个统一的方法去访问相应的对象,以此忽略对象与对象集合之间的差别。生活中比较经典的例子就是公司的组织结构树状图。
模式定义将对象组合成树形结构以表示”部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
使用场景
表示对象的部分-整体层次结构时。
从一个整体中能够独立出部分模块或功能时。
简单使用定义节点
123456789101112131415161718192021public abstract class Component { /** * 节点名 */ protected String name; public Component(String name) { super(); this.name = name; } public abstract void doSomething(); ...
代理模式
个人博客
http://www.milovetingting.cn
代理模式模式介绍代理模式也称为委托模式,是一种结构型模式。
模式定义为其他对象提供一种代理以控制对这个对象的访问。
使用场景当无法或不想直接访问某个对象或访问对象存在困难时,可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,委托对象与代理对象需要实现相同的接口。
简单使用定义接口
12345public interface IVisitor { void visit();}
定义实现类
12345678public class RealVisitor implements IVisitor { @Override public void visit() { System.out.println("Real visit"); }}
定义代理类
123456789101112131415public class ProxyVisitor implements IVisitor { private IVisitor ...
中介者模式
个人博客
http://www.milovetingting.cn
中介者模式中介者模式也称为调解者模式或调停模式。
模式定义中介者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显影响。
使用场景当对象间交互操作很多且每个对象的行为操作都依赖彼此时,为防止在修改一个对象的行为时,同时涉及修改很多其他对象的行为。可采用中介者模式来解决耦合的问题。将对象间多对多关系变成一对多的问题。
简单使用定义Mediator
123456789101112131415public abstract class Mediator { public void handleMessage(Customer customer) { if (customer instanceof Seller) { sendMessageToBuyer(); } else if (customer instanceof Buyer) { sendMessageToSeller(); } } public abstract voi ...
访问者模式
个人博客
http://www.milovetingting.cn
访问者模式模式介绍访问者模式是一种将数据操作与数据结构分离的设计模式,它是《设计模式》中23种设计模式最复杂的一个,但它的使用频率不高。
访问者模式的基本思想是,软件系统中拥有一个由许多对象构成的、比较稳定的对象结构,这些对象的类都拥有accept方法用来接受访问者对象的访问。访问者是一个接口,它拥有一个visit方法,这个方法对访问到的对象结构中不同类型的元素作出不同的处理。在对象结构的一次访问过程中,我们遍历整个对象结构,对每一个对象都实施accept方法,在每一个元素的accept方法中会调用访问者的visit方法,从而使访问者得以处理对象结构的每一个元素,我们可以针对对象结构设计不同的访问者类来完成不同的操作,达到区别对待的效果。
模式定义封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。
使用场景
对象结构比较稳定,但经常需要在此对象结构上定义新的操作。
需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免这些操作污染这些对象的类 ...
模板方法模式
个人博客
http://www.milovetingting.cn
模板方法模式模式介绍在面向对象开发过程中,通常会遇到这样的问题:知道一个算法的关键步骤,并确定了这些步骤的执行顺序,但,某些步骤的具体实现是未知的,如:
检查代码的正确性
链接相关的类库
编译相关代码
执行程序
对于不同的程序设计语言,上述4个步骤是不一样的,但它们的执行流程是固定的,这类问题的解决方案就是模板方法模式。
模式的定义定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。
使用场景
多个子类公有的方法,并且逻辑基本相同
重复、复杂的算法,可以将核心算法设计为模板方法,周边的相关代码细节功能由各个子类实现
重构时,模板方法模式是一个经常使用的模式,把相同的代码抽取到父类中,然后通过钩子函数约束其行为。
简单使用定义接口
123456789101112131415161718192021222324252627public abstract class AbstractComputer { protected vo ...
迭代器模式
个人博客
http://www.milovetingting.cn
迭代器模式模式介绍迭代器模式又称为游标(Cursor)模式,是行为型设计模式之一。
模式定义提供一种方法顺序访问一个容器对象中的各个元素,而又不需要暴露该对象的内部表示。
使用场景遍历一个容器对象时。
简单使用定义迭代器接口
12345678910111213141516171819202122/** * 迭代器接口 * * @author 160317250 * * @param <T> */public interface Iterator<T> { /** * 是否还有下一个元素 * * @return */ boolean hasNext(); /** * 返回当前位置的元素并将位置移至下一位 * * @return */ T next();}
定义迭代器实现类
123456789101112131415161718192021222324252627282930/** * 具体迭代器类 * @author 160317250 * * @p ...
网络
个人博客
http://www.milovetingting.cn
网络前言
本文为学习Java相关知识所作笔记,参考以下资料:https://github.com/Snailclimb/JavaGuide ,感谢原作者的分享!
网络 7 层架构7 层模型主要包括:
物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。 它的主要作用是传输比特流(就是由 1、 0 转化为电流强弱来进行传输,到达目的地后在转化为1、 0,也就是我们常说的模数转换与数模转换)。这一层的数据叫做比特。
数据链路层:主要将从物理层接收的数据进行 MAC 地址(网卡的地址)的封装与解封装。常把这一层的数据叫做帧。在这一层工作的设备是交换机,数据通过交换机来传输。
网络层:主要将从下层接收到的数据进行 IP 地址(例 192.168.0.1)的封装与解封装。在这一层工作的设备是路由器,常把这一层的数据叫做数据包。
传输层:定义了一些传输数据的协议和端口号(WWW 端口 80 等),如: TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数 ...
Java基础
个人博客
http://www.milovetingting.cn
Java基础前言
本文为学习Java相关知识所作笔记,参考以下资料:https://github.com/Snailclimb/JavaGuide ,感谢原作者的分享!
JAVA 异常分类及处理概念如果某个方法不能按照正常的途径完成任务,就可以通过另一种路径退出方法。在这种情况下会抛出一个封装了错误信息的对象。此时,这个方法会立刻退出同时不返回任何值。另外,调用这个方法的其他代码也无法继续执行,异常处理机制会将代码执行交给异常处理器
异常分类Throwable 是 Java 语言中所有错误或异常的超类。下一层分为 Error 和 Exception
ErrorError 类是指 java 运行时系统的内部错误和资源耗尽错误。应用程序不会抛出该类对象。如果出现了这样的错误,除了告知用户,剩下的就是尽力使程序安全的终止
Exception(RuntimeException、 CheckedException)Exception 又 有 两 个 分 支 , 一 个 是 运 行 时 异 常 RuntimeExcepti ...
Java多线程(四)
个人博客
http://www.milovetingting.cn
Java多线程(四)前言
本文为学习Java相关知识所作笔记,参考以下资料:https://github.com/Snailclimb/JavaGuide ,感谢原作者的分享!
CyclicBarrier、 CountDownLatch、 Semaphore 的用法CountDownLatch(线程计数器 )CountDownLatch 类位于 java.util.concurrent 包下,利用它可以实现类似计数器的功能。比如有一个任务 A,它要等待其他 4 个任务执行完毕之后才能执行,此时就可以利用 CountDownLatch来实现这种功能了
1234567891011121314151617181920final CountDownLatch latch = new CountDownLatch(2);new Thread(){ public void run() { System.out.println("子线程"+Thread.current ...