如何限制对象的访问?

时间:2012-02-12 08:47:32

标签: java

我的大学里有类似的有趣任务。例如,有ClassA。我需要限制对象的访问,如果今天是星期天客户端无法生成ClassA对象或使用现有的ClassA对象。我想我需要为类创建一些包装器,否则我需要在ClassA的每个方法中检查一天的条件。是否有任何设计模式?拜托,我希望你能帮助我。

3 个答案:

答案 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模式将帮助您实现此功能。