Java设计模式(一)—-单例模式
一、特点:
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
一、特点:
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
JDBC是Java连接数据库的标准,为了兼容大部分数据库,Java提出了JDBC标准,通过这个标准,让各个数据库提供实现支持,这样实现一处编码,处处运行的Java特性。
习惯了ORM框架,却忘记了原本的JDBC,所以我觉得有必要复习来夯实一下基础。
前面简单介绍了Spring中AOP的使用,是基于XML配置。这次详细介绍一下Spring中AOP的使用和实现。
AOP (Aspect Oriented Programming)
面向切面编程,Spring是通过Java动态代理实现的。
AOP的目的是为了将组件和业务代码分离开,让日志、事务处理、缓存、性能统计、权限控制等等模块跟实际的业务模块解耦。
这么说还是很笼统,Java的类中,属性和方法才是主流,切面是什么,完全没这个概念。
那么以拍电影举个栗子:1
2
3
4
51.前期筹备,剧本确定、演员试镜确定
############分割线a
2. 开拍、剪辑、制作
############分割线b
3. 营销、宣传、公映
1->2->3这个流程是拍电影的业务流程,但是如果我要拍花絮怎么办,这个流程不属于现在的电影业务流程,我们需要安排一个零时的业务,那我们就要在############分割线a
分割线那里添加摄花絮的计划,分配一些人员。
那么分割线那里,就是切面。这些切面干什么,由切面代理去管理和运行,这就是AOP。
讲道理,全栈工程师很少说自己是全栈,倒是一些什么都会一点的人喜欢把全栈挂嘴边,其实什么都不精通。
一直想做个全栈,可惜还差得远。所以写个计划:一方面激励一下自己,防止放荡不羁的太过分;另一方做个积淀,是时候正儿八经的做事情了。
目前计划只是个雏形,不过肯定是围绕Java Web和NodeJS的
后面也许会学习一下PHP和Python,但是不敢打包票,毕竟1口吃不下N个胖子
……乍一看已经挖坑很深了,后面服务器运维的东西已经不敢提上日程了。如果顺利的话,大概得明年才能开启。
目前打算Java语言特性会作为穿插写一写,先从Spring开始扒起,和持久层一起看,主要是自己看的东西,笔记,也可能是转载。
如果努力的话,上半年能把Spring家族的坑,填个十之八九,接下来就是新的JavaScript、NodeJS和一些前端框架了
年底如果没完成,自打80大板
这些年,互联网爆炸式的发展,促生了无数程序员。
也促生了达内,黑马,极客学院等大量 IT培训机构。
短短数年间,科班出生的程序员和培训机构出生的程序员呈指数增长。
程序员的职业也不再是金饭碗。写了这么多代码,有些感触,所以写下来。
从汇编到C语言,再从VB到C++,后来Java 、js……,越来越多的语言被创造出来,渐渐的出现一个奇怪的现象,程序员语言鄙视链。其实所谓的鄙视链往往也就是因为各种语言的性能以及难易度造成的。
按照我现在的经验,往往越高级的语言,越容易阅读,可性能也比不过C语言这种中层语言。因为一系列的检查机制和代码编译造成了一些性能浪费。
接受一个参数,不反回结果,所以是消费者1
2
3
4
5
6/**
* Performs this operation on the given argument.
*
* @param t the input argument
*/
void accept(T t);
内部还有一个默认方法1
2
3
4
5
6
7
8
9
10
11
12
13
14/**
* 返回一个组合的Consumer,依次执行前面Consumer的`accept()`, 接着是{@code after}后操作。
* 如果执行任一操作抛出异常,则将异常抛出给操作的调用方。
* 如果执行前面的`accept()`会引发异常,则不执行{@code after}后的操作。
*
* @param after the operation to perform after this operation
* @return a composed {@code Consumer} that performs in sequence this
* operation followed by the {@code after} operation
* @throws NullPointerException if {@code after} is null
*/
default Consumer<T> andThen(Consumer<? super T> after) {
Objects.requireNonNull(after);
return (T t) -> { accept(t); after.accept(t); };
}
搭建Java服务器就是把JavaEE的Web部署环境和软件都安装好,这是我自己用旧的PC搭建的,所以只是单个服务器,不涉及分布式。这些安装步骤都可以单独找教程
- gcc gcc-c++
- JDK
- Redis
- Nginx
- MySQL
- NodeJS
- Jenkins
可能需要的附加软件
Python pip
…
1 | $ sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bk |
1 | $ cd /etc/yum.repos.d |
1 | $ sudo mv CentOS-7.repo CentOS-Base.repo |