安装手记

1、libevent-2.0.21-stable

1
2
./configure
make && make install

2、ncurses-6.0.tar

1
2
./configure
make && make install

3、tmux-2.2

1
2
3
# 坑在此
CFLAGS="-I/usr/local/include" LDFLAGS="-L//usr/local/lib" ./configure
make && make install

代理模式

  • 为其他对象提供一种代理以控制这个对象的访问

Proxy

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
49
50
51
52
53
54
55
56
57
58
public interface AppleSeller {
void privide(int quantity);
}
//一般其实不需要使用内部类,这里模拟下权限的隔离
public class AppleSellerProxy implements AppleSeller {
private AppleSeller fakeSeller;
private AppleSeller certifiedProvider;
public AppleSellerProxy(){
fakeSeller=new FakeProvider();
certifiedProvider=new CertifiedProvider();
System.out.println("供应商找完了!");
}
@Override
public void privide(int quantity) {
if(quantity>100){
System.out.println("买的很多,给他一些假货!");
fakeSeller.privide(quantity/2);
certifiedProvider.privide(quantity-quantity/2);
return;
}
System.out.println("给真货!");
certifiedProvider.privide(quantity);
}
private class CertifiedProvider implements AppleSeller{
@Override
public void privide(int quantity) {
System.out.println("给你"+quantity+"个正品!");
}
}
private class FakeProvider implements AppleSeller{
@Override
public void privide(int quantity) {
System.out.println("给你"+quantity+"个假货!");
}
}
}
public class Client {
public static void main(String[] args) {
// 对于客户来说,你只能找到代理而找不到供货商
AppleSeller seller=new AppleSellerProxy();
seller.privide(10);
seller.privide(1000);
// 在实际的开发当中也是如此,提供给客户端的接口其实是一个代理,
// 用于进一步的精细控制,比如灰度发布的逻辑与权限的逻辑等,
// 之后再把不同的请求发送至不同的服务端
}
}

享元模式

  • 运用共享技术有效地支持大量细粒度对象
    Flyweight
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
public interface ColorFlyweight {
String getColorName();
void draw();
}
public class BaseColor implements ColorFlyweight {
private String name;
public BaseColor(String name) {
this.name = name;
}
@Override
public String getColorName() {
return name;
}
@Override
public void draw() {
System.out.println("Draw: "+name);
}
}
/**
* 复合的颜色,这些颜色由基础的颜色进行合成,复用率低,一般不需要共享
*/
public class CompositeColor implements ColorFlyweight{
Map<ColorFlyweight,Integer> colorPanel;
public CompositeColor(){
colorPanel=new HashMap<>();
}
public void add(ColorFlyweight color,Integer depth){
colorPanel.put(color,depth);
}
public void remove(ColorFlyweight color){
colorPanel.remove(color);
}
@Override
public String getColorName() {
List<String> colorNameList=new ArrayList<>();
colorPanel.forEach((color,depth)->{
colorNameList.add(color.getColorName()+"("+depth+")");
});
return String.join("-",colorNameList);
}
@Override
public void draw() {
List<String> colorNameList=new ArrayList<>();
colorPanel.forEach((color, depth) -> {
colorNameList.add(color.getColorName() + "(" + depth + ")");
});
System.out.println("Draw: " + String.join("-", colorNameList));
}
}
public class ColorFactory {
private static Map<String, ColorFlyweight> colors = new HashMap<>();
private static ColorFactory factory = new ColorFactory();
private ColorFactory() {
}
public static ColorFactory instance() {
return factory;
}
/**
* 模拟获取不同的基色
*/
public ColorFlyweight getBaseColor(String name) {
ColorFlyweight color = colors.get(name);
if (null == color) {
color = new BaseColor(name);
colors.put(name, color);
}
return color;
}
/**
* 模拟获取不同的混合颜色
*/
public ColorFlyweight getCompositeColor(String[] names, Integer[] depths) {
final CompositeColor color = new CompositeColor();
IntStream.range(0, names.length)
.forEach(idx -> color.add(getBaseColor(names[idx]), depths[idx]));
return color;
}
}
public class App {
public static void main(String[] args) {
ColorFlyweight red = ColorFactory.instance().getBaseColor("R");
red.draw();
ColorFlyweight green = ColorFactory.instance().getBaseColor("G");
green.draw();
ColorFlyweight blue = ColorFactory.instance().getBaseColor("B");
blue.draw();
String[] whiteColorArray = { "R", "G", "B" };
Integer[] whiteDepthArray = { 255, 255, 255 };
ColorFlyweight white = ColorFactory.instance()
.getCompositeColor(whiteColorArray, whiteDepthArray);
white.draw();
String[] blackColorArray = { "R", "G", "B" };
Integer[] blackDepthArray = { 0, 0, 0 };
ColorFlyweight black = ColorFactory.instance()
.getCompositeColor(blackColorArray, blackDepthArray);
black.draw();
}
}