我的设计模式学习笔记(1)

学习了设计模式的一点初步知识,决定记录一下。

今天的记录涉及的模式有:

facade,  proxy , factory  ,singleton

用例uml图如下:

clazz : 这个用作模拟原子组件,在模式中他应该是多个组件中的一个


代码如下:


package ss.testFacadeProxy;

public class Clazz {
 private String typeMe=null;
 public Clazz(String type)
 {
   this.typeMe=type;
 }
 public String  method()
{
  return this.typeMe;
}
}



facade: 这个是多个组建的对外接口,他是一个接口类


代码如下:

package ss.testFacadeProxy;

public interface Facade {
 public Clazz getClazz();
}


BoFacade: 这个是实现了facade接口的类 用来实现接口中的方法




package ss.testFacadeProxy;

public class BOFacade implements Facade{
  public BOFacade() {
  }
  public Clazz getClazz()
  {
     return new Clazz("BOFacade");
  }
}



EJBFacade : 这个市另外一个与BOFacade平级的类,用作表示另外一种借口模式


package ss.testFacadeProxy;

public class EJBFacade implements Facade{

  public Clazz getClazz()
    {
      return new Clazz("EJBFacade");
    }

}



FacadeProxy :这个类用来定义一个facade接口的代理

他的功能是选择用BOFacade 实现 facade接口 还是用EJBFacade实现facade接口


package ss.testFacadeProxy;

public class FacadeProxy implements Facade {

  private final int FACADE_TYPE = 1;
  private final int BO_FACADE = 1;
  private final int EJB_FACADE = 2;
  private Facade facade;

  public FacadeProxy(final int FACADE_TYPE) {
    switch (FACADE_TYPE) {
      case BO_FACADE:
        facade = new BOFacade();
        break;
      case EJB_FACADE:
        facade = new EJBFacade();
        break;
      default:
        facade = new BOFacade();
        break;
    }

  }
  public Clazz getClazz()
  {
  return facade.getClazz();
  }

}



Test 这个是调用的类,在它里面会传递进取一个环境标示,这个就能确定我们是在调用EJBfacade还是BOFacade

package ss.testFacadeProxy;

public class Test {
  public static void main(String[] args) {
    FacadeProxy facadeProxy = new FacadeProxy(2);
    Clazz clazz = facadeProxy.getClazz();
    System.out.println(clazz.method());
    System.out.println("-----------------------------");
    System.out.println(clazz.method());
  }

}
//----------------------FacadeFactory-----------------------------
//package ss.testFacadeProxy;
//
//public class FacadeFactory {
//  private static String clazz = "";
//    public FacadeFactory(String clazz) {
//      this.clazz = clazz;
//    }
//    public Facade get() {
//      try {
//        Class c = Class.forName(clazz);
//        Facade o = (Facade) c.newInstance();
//        return o;
//      }
//      catch (Exception e) {
//        e.printStackTrace();
//        return null;
//      }
//    }
//}

posted @ 2004-12-01 19:11  黄金¤小草  阅读(170)  评论(0)    收藏  举报