设计模式-装饰模式
装饰器模式装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 装饰器模式通过将对象包装在装饰器类中,以便动态地修改其行为。 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。 类图示例 举个例子假设我们有一个简单的咖啡售卖系统。咖啡有不同的种类(如拿铁、美式咖啡),并且可以添加各种配料(如牛奶、糖、奶油)来改变咖啡的口味和价格。 代码实现123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960//抽象咖啡类abstract class Coffee{ public abstract double cost(); public abstract String name();}//拿铁class Latte extends...
设计模式-组合模式
组合模式组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。 这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。 类图示例 举个例子公司管理系统 代码实现12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394import java.util.ArrayList;import java.util.List;//公司抽象类abstract class Company{ protected String name; public Company(String...
希尔排序
希尔排序一、概念及其介绍希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进。 希尔排序又称缩小增量排序,因 DL.Shell 于 1959 年提出而得名。 它通过比较相距一定间隔的元素来进行,各趟比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止。 二、适用说明希尔排序时间复杂度是 O(n^(1.3-2)),空间复杂度为常数阶 O(1)。希尔排序没有时间复杂度为 O(n(logn)) 的快速排序算法快 ,因此对中等大小规模表现良好,但对规模非常大的数据排序不是最优选择,总之比一般 O(n^2 ) 复杂度的算法快得多。 三、过程图示希尔排序目的为了加快速度改进了插入排序,交换不相邻的元素对数组的局部进行排序,并最终用插入排序将局部有序的数组排序。 在此我们选择增量 gap=length/2,缩小增量以 gap = gap/2 的方式,用序列 {n/2,(n/2)/2…1} 来表示。 如图示例: (1)初始增量第一趟 gap =...
堆排序
概述堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法: 大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列;小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列; 动画展示 思路解析 初始序列:91, 60, 96, 13, 35, 65, 46, 65, 10, 30, 20, 31, 77, 81, 22 根据完全二叉树用数组存储,那么在数组中的下标是有规律的,左孩子是父节点下标的两倍加一,右孩子是父节点下标的两倍加二。而且最后一个父节点是数组总长度 / 2 -...
设计模式-桥接模式
桥接模式桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类,这两种类型的类可被结构化改变而互不影响。 桥接模式的目的是将抽象与实现分离,使它们可以独立地变化,该模式通过将一个对象的抽象部分与它的实现部分分离,使它们可以独立地改变。它通过组合的方式,而不是继承的方式,将抽象和实现的部分连接起来。 类图示例 举个例子手机品牌和手机软件之间的兼容 类图 代码实现123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960//手机软件抽象类abstract class HandsetSoft { public abstract void Run();}//手机游戏class HandsetGame extends...
设计模式-适配器模式
适配器模式适配器模式(Adapter...
Linux管道、环境变量和常用命令
7 管道、环境变量与常用命令7.1 管道类似文件重定向,可以将前一个命令的stdout重定向到下一个命令的stdin 要点 仅处理stdout,忽略stderr 管道右边的命令必须能接收stdin,例如rm无法接收stdin 多个管道命令可以串联 与文件重定向的区别 文件重定向的左边为命令,右边为文件 管道左右两边都是命令,左边必须有stdout,右边必须有stdin 例:统计当前目录下的所有Python文件的总行数 12find . -name '*.py' | xargs cat | wc -l cat的作用是,把接收的文件拼接在一起,然后输出到stdout中。 xargs接收find的stdout作为自己的stdin,然后按空格拆分成多项,传给cat作为它的文件参数。如果不用xargs,cat只会输出传入的文件名,与预期结果不一样。 例如,当前文件夹下有2个文件a.txt和b.txt,则find . -name '*.py' | cat得到输出与find . -name...
Linux常用软件tmux和vim
2 tmux和vim2.1 tmuxtmux优势 不需要本地编译器,只需要终端编译器 不用担心断网,自动恢复现场 分屏 结构:tmux允许有多个session,一个session允许有多个window,一个window允许有多个pane 修饰键:`ctrl b 通常修饰键的使用规则是,按下并释放后,再按其它键,而不是同时按下。 键盘操作 操作 快捷键 说明 新建session tmux 在终端中输入,不能在tmux中嵌套 左右分屏 修饰键 % 把当前pane拆分成左右两部分 上下分屏 修饰键 " 把当前pane拆分成上下两部分 关闭当前pane ctrl d 如果没有pane,则关闭window;如果没有window,则关闭session 选择相邻pane 修饰键 方向键 选择界面汇中相邻的pane 调整分割线 修饰键 方向键(同时按下) 调整pane分割线位置 全屏 修饰键 z 将当前pane全屏/取消全屏 挂起session 修饰键 d 将当前session移至后台 恢复session tmux...
Linux常用文件管理命令
1 常用文件管理命令 1.1 常用Linux命令 命令 功能 备注 ls 列举目录 参数:-l显示详细信息;-h显示空间大小单位,常和-l一起使用;-a显示隐藏文件。蓝色是文件夹,白色是普通文件,绿色是可执行文件。 pwd 显示当前目录 当前目录名较长时使用 cd 切换目录 不带参数切换回家目录~,等价于命令cd ~;参数:.当前目录;~家目录home;-上次使用的目录;..上一级目录;/根目录;\相对路径分隔符 cp 复制粘贴 ① cp <源文件路径> <目的文件路径> ② 可用通配符描述路径,*表示任意多字符,?表示任意一个字符 ③ 可用参数-r递归复制文件夹 mv 移动 ① mv <源文件路径> <目的文件路径> ② 可实现重命名 ③ 可用通配符描述文件 mkdir 创建文件夹 ① mkdir <文件夹1> <文件夹2> … ② 默认递归创建文件夹(连续创建) touch 创建文件 touch <文件名> rm 删除 ① 删除目录需要参数-d;②...
设计模式-单例模式
单例模式单例模式(Singleton Pattern)是中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供了一个全局访问点来访问该实例。 注意: 1、单例类只能有一个实例。2、单例类必须自己创建自己的唯一实例。3、单例类必须给所有其他对象提供这一实例。 主要解决频繁创建和销毁全局使用的类实例的问题。 何时使用当需要控制实例数目,节省系统资源时。 类图示例 代码实现1234567891011121314151617181920212223class SingleObject { private static SingleObject instance = new SingleObject(); private SingleObject() { } public...