桥接模式

  • 抽象部分与实现部分分离,使他们可以各自独立的变化
    Bridge
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
129
130
//手机抽象类
public abstract class AbstractPhone {
protected OperatingSystem os;
public OperatingSystem getOs() {
return os;
}
public void setOs(OperatingSystem os) {
this.os = os;
}
/**
* 开机
*/
public abstract void startUp();
}
//操作系统接口
public interface OperatingSystem {
void loadCore();
void loadMoudleTree();
void done();
}
//IOS实现
public class IOS implements OperatingSystem {
@Override
public void loadCore() {
System.out.println("加载IOS内核");
}
@Override
public void loadMoudleTree() {
System.out.println("加载IOS核心模块树");
}
@Override
public void done() {
System.out.println("Welcome-Assembled in China.Designed by Apple in California!");
}
}
//TouchWiz实现
public class TouchWizAndroid implements OperatingSystem {
@Override
public void loadCore() {
System.out.println("Samsung加载C4核心");
}
@Override
public void loadMoudleTree() {
System.out.println("Samsung预热雷管模块");
}
@Override
public void done() {
System.out.println("Samsung随身Bomb加载完毕");
}
}
//操作系统工厂
public class OSFactory {
private OSFactory(){};
private static class OSFactoryImpl{
static OSFactory factory=new OSFactory();
}
public static OSFactory instance(){
return OSFactoryImpl.factory;
}
public OperatingSystem getOS(String osKey){
if(osKey.equalsIgnoreCase("ios")){
return new IOS();
}
if(osKey.equalsIgnoreCase("samsung")){
return new TouchWizAndroid();
}
return null;
}
}
//IPhone子类实现
public class IPhone extends AbstractPhone{
@Override
public void startUp() {
setOs(OSFactory.instance().getOS("ios"));
System.out.println("硬件自检");
os.loadCore();
os.loadMoudleTree();
os.done();
System.out.println("enjoy!");
}
}
//SamsungPhone子类实现
public class SamsungPhone extends AbstractPhone {
@Override
public void startUp() {
setOs(OSFactory.instance().getOS("samsung"));
System.out.println("检测炸弹状态");
os.loadCore();
os.loadMoudleTree();
os.done();
System.out.println("炸弹启动完毕");
}
}
//客户端
public class App {
public static void main(String[] args) {
/**
* 桥接模式:适用于多个维度的互相变化(本例中:手机的启动,不同操作系统的启动)
* 抽象部分与实现部分分离,使他们可以各自独立的变化
*/
AbstractPhone iphone=new IPhone();
AbstractPhone samsung=new SamsungPhone();
iphone.startUp();
samsung.startUp();
}
}

适配器模式

  • 将一个类的接口转换成客户希望的另一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
    Adapter
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
public interface Bomb {
void bomb();
}
public interface Phone {
void start();
void shutdown();
}
public class CommonPhone implements Phone{
@Override
public void start() {
System.out.println("Phone Start!");
}
@Override
public void shutdown() {
System.out.println("Phone Shutdown!");
}
}
//类适配器模式
public class SamsungAdapter implements Phone,Bomb {
@Override
public void bomb() {
System.out.println("Bom!!!HAHAHA!!!");
}
@Override
public void start() {
System.out.println("Samsung Start!");
}
@Override
public void shutdown() {
System.out.println("Samsung Shutdown!");
}
}
//对象适配器模式
public class SamsungAdapterByObject implements Bomb {
private Phone phone;
public SamsungAdapterByObject(Phone p){
this.phone=p;
}
@Override
public void bomb() {
System.out.println("Bom!!!HAHAHA!!!");
}
public void start() {
phone.start();
}
public void shutdown() {
phone.shutdown();
}
}
public class App {
public static void main(String[] args) {
Phone apple=new CommonPhone();
apple.start();
apple.shutdown();
/**
* 适配器模式有两种实现方式,一种是继承,一种是组合
*/
//类适配器模式
SamsungAdapter samSung=new SamsungAdapter();
samSung.start();
samSung.shutdown();
samSung.bomb();
//对象适配器模式
SamsungAdapterByObject samSungByObject=new SamsungAdapterByObject(new CommonPhone());
samSungByObject.start();
samSungByObject.shutdown();
samSungByObject.bomb();
}
}
  • 经典的DAO模式即为一种适配器模式
    DAO模型

  • CommonDao定义了一般的Dao操作,AbstractBaseDaoImpl实现了CommonDao,BussDao定义了业务特殊的一些Dao操作,BussDaoImpl是其的实现,让其继承AbstractBaseDaoImpl,即拥有了Common的功能同时有业务Dao能力,而代码尽可能少,这也是一种缺省适配模式的结构。

单例模式

  • 保证一个类仅有一个实例,并提供一个全局访问点
    Singleton
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class SuperSingleton {
/**
* 简单浅显易懂的单例方式,JVM实现了线程安全,同时实现了懒加载,the final solution!
*/
private static class SingleData {
public static SuperSingleton singleton = new SuperSingleton();
}
private SuperSingleton() {
}
public static SuperSingleton Instance() {
return SingleData.singleton;
}
}