我和我的大學有類似的有趣任務。例如,有ClassA。我需要限制訪問對象,如果今天是星期日客戶端不能使ClassA對象或使用現有的ClassA對象。我想我需要爲課堂做一些包裝,否則我需要在ClassA的每個方法中檢查一天的情況。是否有任何設計模式?請,我希望你能幫助我。如何限制訪問對象?
回答
工廠模式是你在找什麼。您將參數傳遞給工廠類(「包裝器」),它負責創建正確類型的對象。例如:
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);
...
OK,它對於製作ClassA的對象很有好處。但是我需要,如果今天是星期日,所有現有的對象都不起作用,即客戶端無法執行obj.add(),obj.remove()等。 – user1166635 2012-02-12 09:14:55
「不工作」是什麼意思?沒做什麼?拋出異常?您可以實現ClassB,以便無條件地在每次調用時拋出一個'IllegalStateException'。或者,只需向ClassA添加一個'isAvailable()'方法,並在需要調用add或remove時隨時查詢它。這會更好。 – 2012-02-12 09:26:02
既然你要不能使用其他現有ClassA的對象了一個客戶端,它可能會幫助一個樣的動態代理。這裏粗略的代碼:
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;
}
});
}
}
好吧,我讀了作者給第一個回答的評論。也許這不是完全錯誤的。 Sry,它從簡單的工廠開始 – 2012-02-12 09:40:17
- 1. 如何限制用戶訪問對象?
- 2. 限制對S3中對象的訪問
- 3. 如何限制對javascript對象的訪問?
- 4. 如何限制對NuGet Feed的訪問?
- 5. 如何限制對phpmyadmin的訪問?
- 6. 如何限制對nuget包的訪問?
- 7. 如何使用detailview類限制對象的訪問
- 8. 如何限制訪問共享對象中的符號?
- 9. 如何限制訪問api
- 10. 限制對sendmessage.php的訪問
- 11. 如何限制對付費視頻的訪問權限?
- 12. 如何限制對有限域名的API訪問?
- 13. 如何使用django auth權限限制對grappelli filebrowser的訪問?
- 14. 解析:如何限制對Parse中對象的某些屬性的訪問?
- 15. 訪問限制
- 16. 如何訪問InterJson對象對象值
- 17. 限制對特定對象的公共setter訪問(C#)
- 18. 如何在對象控制器中訪問對象模型(「init」)
- 19. 對象的訪問控制
- 20. 如何訪問對象
- 21. 如何訪問ASP對象
- 22. 如何訪問JavaScript對象
- 23. 如何訪問對象
- 24. 如何訪問js對象
- 25. 如何限制對AWS WorkSpace服務對特定IP的訪問?
- 26. PDP訪問權限限制
- 27. SELECT對SQL 2005視圖的訪問權限對底層表的限制訪問
- 28. MS訪問限制
- 29. 限制訪問類
- 30. Github限制訪問
*「我和我的大學有類似的有趣的任務。」* 1)你有一個奇怪的'有趣'的想法。 2)不要忘記將[標籤:家庭作業]標籤添加到作業問題。 – 2012-02-12 08:54:13
對不起,謝謝。 – user1166635 2012-02-12 09:06:48