单例模式
如果某类采取了单例模式,那么保证了其实例对象的唯一性。
实现方法:
1. 保证类的构造函数不可见
2. 新建一个全局可见的函数(如 getInstance() ),用来读取或创建类实例,返回对象是唯一的。
桥接模式
简单工厂模式
体育协会 .java
public class 体育协会 {
public static 运动员 注册足球运动员 (){
return new 足球运动员 ();
}
public static 运动员 注册篮球运动员 (){
return new 篮球运动员 ();
}
}
俱乐部 .java
public class 俱乐部 {
private 运动员 守门员 ;
private 运动员 后卫 ;
private 运动员 前锋 ;
public void test() {
this. 前锋 = 体育协会 . 注册足球运动员 ();
this. 后卫 = 体育协会 . 注册足球运动员 ();
this. 守门员 = 体育协会 . 注册足球运动员 ();
守门员 . 跑 ();
后卫 . 跳 ();
}
}
缺点:必须事先知道类名
抽象工厂模式
public abstract class Factory{
public abstract Sample creator();
public abstract Sample2 creator(String name);
}
public class SimpleFactory extends Factory{
public Sample creator(){
.........
return new SampleA
}
public Sample2 creator(String name){
.........
return new Sample2A
}
}
public class BombFactory extends Factory{
public Sample creator(){
......
return new SampleB
}
public Sample2 creator(String name){
......
return new Sample2B
}
}
观察者模式
public class Observable {
-
private boolean changed = false;
-
private Vector obs;
-
-
// 创建被观察者时就创建一个它持有的观察者列表,注意,这个列表是需要同步的。
-
public Observable() {
-
obs = new Vector();
-
}
-
-
/**
-
* 添加观察者到观察者列表中去
-
*/
-
public synchronized void addObserver(Observer o) {
-
if (o == null)
-
throw new NullPointerException();
-
if (!obs.contains(o)) {
-
obs.addElement(o);
-
}
-
}
-
-
/**
-
* 删除一个观察者
-
*/
-
public synchronized void deleteObserver(Observer o) {
-
obs.removeElement(o);
-
}
-
-
/**
-
* 通知操作,即被观察者发生变化,通知对应的观察者进行事先设定的操作,不传参数的通知方法
-
*/
-
public void notifyObservers() {
-
notifyObservers(null);
-
}
-
-
/**
-
* 与上面的那个通知方法不同的是,这个方法接受一个参数,这个参数一直传到观察者里,以供观察者使用
-
*/
-
public void notifyObservers(Object arg) {
-
-
Object[] arrLocal;
-
-
synchronized (this) {
-
if (!changed)
-
return;
-
arrLocal = obs.toArray();
-
clearChanged();
-
}
-
-
for (int i = arrLocal.length-1; i>=0; i--)
-
((Observer)arrLocal[i]).update(this, arg);
-
}
-
}