排序
均未考虑边界条件
冒泡
比较相邻的,第一个大,就交换。$n^2$复杂度
1 | public void bubblie(int[] a){ |
### 1. 代理
静态代理:用继承或者实现接口来对原来的类加上额外的功能,和装饰者差不多。
动态代理:在程序运动的时候产生代理类。
1 | // loader 类加载器(findClass ,defineClasss,……) |
主要流程:
Proxy内部实现一个代理类,代理类是在编译的时候生成的,代理类中要把handler给传进去。handler中有具体的实例,有一个Invoke方法,在方法中添加功能之后调用method.invoke(obj,args)来执行原来的功能。在代理类中的方法中执行中:让handler.invoke(method,target)。
总体的实现是在handler的invoke方法中。要想在代理类中调用handler.invoke方法,就要把handler传入代理类。也就是编写一个代理类文件然后编译。
1 | newProxy->(创建代理对象Proxy,需要传入handler,将接口的所有方法改为handler.invoke(method,args))-》run method()-》handler.invoke(method,args)-> method.invoke(obj,args); |
JDK需要目标类实现一个接口。
CGLIB生成目标类的子类。子类就是代理对象。也就是目标类不能是Final
饿汉-线程安全,直接用静态变量初始化。只有一个实例。
1 | private static Singleton example=new SIngleton(); |
双重校验锁
1 | private static volitale Singleton example; |
用一个工厂类来new各种不同类型的对象,就是说把对象的建立专门抽取出来。
定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。
与简单工厂不同的是,现在有很多不同类型的工厂。
一个产品的种类太多,可以分为很多个不同的大类,然后就将这不同的种类分到不同的大类中去。
抽象工厂类。
继承和组合。
例:火鸡接口中没有鸭子接口的方法,用一个适配器来实现鸭子接口,用火鸡来模仿鸭子。
1 | public interface Duck(){ |
1 | //直接继承了火鸡类而不是使用构造器注入 |
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
1 | $ hexo new "My New Post" |
More info: Writing
1 | $ hexo server |
More info: Server
1 | $ hexo generate |
More info: Generating
1 | $ hexo deploy |
More info: Deployment