设计模式之代理模式

代理模式提供了目标对象另外的访问方式,在不修改目标类型的基础上对目标类型进行扩展,符合设计模式中遵循的开闭原则,对扩展开放,对修改关闭。

1. 静态代理

静态代理在使用时需要定义接口或者超类,被代理对象与代理对象一起实现同一个接口或者是继承同一个超类。

下面举个例子说明:
我们在购买火车票时可以到火车站购买,也可到各个代售点购买,火车站就是目标对象,代售点即是代理对象,他们都能完成购票,最主要的是代售点使用的售票接口就是车站官方的售票接口。

票务接口 TicketService.java

1
2
3
4
public interface TicketService{
void buyTicket();
void refund();//退票
}

目标对象车站 Station.java

1
2
3
4
5
6
7
8
public class Station implement TicketService{
public void buyTicket(){
System.out.println("----买票-----");
}
public void refund(){
System.out.println("----退票----");
}
}

查看更多

设计模式之单例模式

许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。

1、什么是单例

1.1 定义

单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。

1.2 实现思路

面向对象编程中,我们通过类的构造器生成对象,只要内存足够就可以构造出很多个实例,所以要限制某个类型只有唯一的一个实例对象,那就要从构造函数着手。

  1. 需要声明一个能返回对象的引用,定义一个获得该对象引用的方法(必须是静态方法,通常使用getInstance这个名称)
查看更多

logback配置详解

logback是java的日志开源组件,是log4j创始人写的,性能比log4j要好,目前主要分为3个模块

  1. logback-core:核心代码模块
  2. logback-classic:log4j的一个改良版本,同时实现了slf4j的接口,这样你如果之后要切换其他日志组件也是一件很容易的事
  3. logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能
查看更多

设计模式之建造者模式

静态工厂和构造器有一个共同的局限性:不能很好的扩展到大量的可选参数。对于初始化参数很多的类,常规的做法是使用重载构造器,但是当参数很多的时候,客户端代码会很难写,并且较难阅读。

这时,还有另外一种替代方案,使用javaBean模式,在这种模式下先默认构造器创建对象,然后用setter方法设置需要的参数。遗憾的是,JavaBean模式自身有着很严重的缺点,因为构造过程分成了好几个调用,在构造过程中JavaBean可能处于不一致的状态,类无法仅仅通过检查构造器参数的有效性来保证一致性。

最终还有第三种替代方案,既能确保安全性,也能保证可读性,那就是建造者模式。

1. 建造者模式

直接看一个简单例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
public class Person {
private final String name;
private final String address;
private final int age;
private final int sex;
private final String tel;

public static class Builder {
//Required parameters
private final String name;
private final int age;
private final int sex;
//Optional parameters
private String address = "浙江杭州";
private String tel = "0571";

public Builder(String name, int age, int sex) {
this.name = name;
this.age = age;
this.sex = sex;
}

public Builder address(String address) {
this.address = address;
return this;
}

public Builder tel(String tel) {
this.tel = tel;
return this;
}

public Person build(){
return new Person(this);
}
}
private Person(Builder builder){
name = builder.name;
address = builder.address;
sex = builder.sex;
age = builder.age;
tel = builder.tel;
}

public static void main(String[] args){
Person p = new Builder("zhaozhengkang",25,1).address("yuhang").tel("123456789").build();
}
}

builder的设值方法返回builder本身,以便把调用连接起来形成一个流式的API.

查看更多

Java中的日志框架

1 java常用日志框架类别介绍

  • Log4j Apache Log4j是一个基于Java的日志记录工具。它是由Ceki Gülcü首创的,现在则是Apache软件基金会的一个项目。 Log4j是几种Java日志框架之一。
  • Log4j 2 Apache Log4j 2是apache开发的一款Log4j的升级产品。
  • Commons Logging Apache基金会所属的项目,是一套Java日志接口,之前叫Jakarta Commons Logging,后更名为Commons Logging。
  • Slf4j 类似于Commons Logging,是一套简易Java日志门面,本身并无日志的实现。(Simple Logging Facade for Java,缩写Slf4j)。
查看更多

mysql-5.7 windows下安装

1. 下载

选择zip格式的压缩包,解压到指定盘中D:\mysql-5.7

2. 配置环境变量

MYSQL_HOME:D:\mysql-5.7
在path 后面添加 ;%MYSQL_HOME%\bin

3. 添加文件my.ini文件

将如下代码放入my.ini文件中
basedir和datadir,请根据实际安装目录进行修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=D:\mysql5.7
# 设置mysql数据库的数据的存放目录
datadir=D:\mysql5.7\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

4. 打开cmd.exe

必须以管理员的身份运行,从c:/windows/systen32文件夹中找到cmd.exe,右击以管理员身份打开。

查看更多