我的大学里有类似的有趣任务。例如,有ClassA。我需要限制对象的访问,如果今天是星期天客户端无法生成ClassA对象或使用现有的ClassA对象。我想我需要为类创建一些包装器,否则我需要在ClassA的每个方法中检查一天的条件。是否有任何设计模式?拜托,我希望你能帮助我。
答案 0 :(得分:5)
您正在寻找工厂模式。您将参数传递给工厂类(“包装器”),它负责创建正确类型的对象。例如:
class ClassA implements MyInterface { ... }
class ClassB implements MyInterface { ... }
class MyFactory {
public MyInterface create(int dayOfTheWeek) {
if (dayOfTheWeek == 0) {
return new ClassA();
} else {
return new ClassB();
}
}
}
当您需要一个新对象时,MyFactory会决定实际的类:
MyFactory factory = new MyFactory();
MyInterface object = factory.create(dayOfTheWeek);
...
答案 1 :(得分:2)
由于您希望客户端不能使用其他现有的Class对象,因此它可能有助于一种动态代理。这里粗略的代码:
public class MasterControl {
public static boolean check(Method m){
//do controls on the current day
//return true/false accordingly
}
}
public class ProxyFactory {
public static ClassAInterface getListProxy(final ClassA cp){
return (ClassAInterface) Proxy.newProxyInstance(cp.getClass().getClassLoader(), new Class[] {ClassAInterface.class},new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
if(MasterControl.check(method,args[0]))
return method.invoke(cp, args);
else
return (ClassAInterface) null;
}
});
}
}
答案 2 :(得分:0)
Factory模式将帮助您实现此功能。