常见的设计模式(一)

单例模式

如果某类采取了单例模式,那么保证了其实例对象的唯一性。

实现方法:

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 {

  1. private boolean changed = false;

  2. private Vector obs;

  3.  

  4. // 创建被观察者时就创建一个它持有的观察者列表,注意,这个列表是需要同步的。

  5. public Observable() {

  6. obs = new Vector();

  7. }

  8.  

  9. /**

  10. * 添加观察者到观察者列表中去

  11. */

  12. public synchronized void addObserver(Observer o) {

  13. if (o == null)

  14. throw new NullPointerException();

  15. if (!obs.contains(o)) {

  16. obs.addElement(o);

  17. }

  18. }

  19.  

  20. /**

  21. * 删除一个观察者

  22. */

  23. public synchronized void deleteObserver(Observer o) {

  24. obs.removeElement(o);

  25. }

  26.  

  27. /**

  28. * 通知操作,即被观察者发生变化,通知对应的观察者进行事先设定的操作,不传参数的通知方法

  29. */

  30. public void notifyObservers() {

  31. notifyObservers(null);

  32. }

  33.  

  34. /**

  35. * 与上面的那个通知方法不同的是,这个方法接受一个参数,这个参数一直传到观察者里,以供观察者使用

  36. */

  37. public void notifyObservers(Object arg) {

  38.  

  39. Object[] arrLocal;

  40.  

  41. synchronized (this) {

  42. if (!changed)

  43. return;

  44. arrLocal = obs.toArray();

  45. clearChanged();

  46. }

  47.  

  48. for (int i = arrLocal.length-1; i>=0; i--)

  49. ((Observer)arrLocal[i]).update(this, arg);

  50. }

  51. }

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值