如何区分控制对任何班级成员的访问?假设我有三个班级: -
Class A
{
int a;
int b;
}
Class B
{
Access to only 'a' and not 'b'
}
Class C
{
Access to only 'b' and not 'a'
}
答案 0 :(得分:1)
一种方法是使用面向方面的编程。您可以查看访问包或类,并禁止访问。
AspectJ可用于强制执行持久层中的类不在Web层中访问,只能从服务层访问。这是一个例子:
http://blog.jayway.com/2010/03/28/architectural-enforcement-with-aid-of-aspectj/
答案 1 :(得分:1)
接口时间:
interface IHaveA { int a {get;set;} }
interface IHaveB { int b {get;set;} }
Class A : IHaveA, IHaveB
{
public int a {get;set;}
public int b {get; set;}
}
Class B
{
IHaveA _iHaveA;
C(IHaveA iHaveA)
{
_iHaveA = iHaveA;
}
}
Class C
{
IHaveB _iHaveB;
C(IHaveB iHaveB)
{
_iHaveB = iHaveB;
}
}
然后像这样新起来B和C:
static Main()
{
A a = new A();
B b = new B(a);
C c = new C(a);
}
答案 2 :(得分:0)
这是一个非常粗略的想法。
A有一个函数来从B派生一个观察者,另一个函数带一个派生自A的观察者。
class A
{
int a;
int b;
void getAObserver(B bInstance);
void getBObserver(C cInstance);
}
然后让A可以在实例上调用aWasUpdated或bWasUpdated等函数,使成员a和b类型的psuedo公开到特定的类。
答案 3 :(得分:0)
实现这一目标的一种非常粗糙的方式是
Class A {
private int a ;
private int b ;
public int getA( Object obj) throws userDefinedIllegalAccessException {
//check if obj isInstance of B
// If yes return a
// else throw userDefinedIllegalAccessException
}
public int getB( Object obj) throws userDefinedIllegalAccessException {
//check if obj isInstance of c
// If yes return b
// else throw userDefinedIllegalAccessException
}
}
class B {
public void checkAccessValue() {
try{
A objA = new A() ;
System.out.println(objA.getA(this) ;
System.out.println(objA.getB(this) ;
}
catch(userDefinedIllegalAccessException udException){
}
}
}
class C {
public void checkAccessValue() {
try{
A objA = new A() ;
System.out.println(objA.getA(this) ;
System.out.println(objA.getB(this) ;
}
catch(userDefinedIllegalAccessException udException){
}
}
}