我的设计模式学习笔记(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;
// }
// }
//}