我會使用Decorator模式這一點,如果你有你的代碼應該是很容易升級的非功能性需求。它看起來如下所示:
//first define a basic layout for your class
public abstract class User{
public abstract String foo(String bar);
}
//then extend it and implement real behavior
public class concreteUser extends User {
public String foo(String bar) {
...
}
}
//now comes the interesting part... the decorator. At first we need to define a layout for our decorators, that extends your implementation
public abstract class UserDecorator extends User {
@Override
public abstract String foo(String bar);
}
//now you are ready to do everything you want
有了這個3類你現在可以開始「裝飾」在你的類中的每個可能的方式重量級和輕量級行爲。讓我們有一個例子,並創建一個裝飾:
public class AsdfUserDecorator extends UserDecorator {
private final User user;
public AsdfUserDecorator(User user) {
this.user = user;
}
@Override
public String foo(String bar) {
//do stuff
...
//propagate everything to other decorators (this is the magic)
return foo(user.foo(bar));
}
private String additionalHeavyweightStuff(String asdasd) {
return blubb;
}
}
//and another one
public class QwerUserDecorator extends UserDecorator {
//no changes in the class in this example... its the same as AsdfUserDecorator....
private final User user;
public AsdfUserDecorator(User user) {
this.user = user;
}
@Override
public String foo(String bar) {
//do stuff
...
//propagate everything to other decorators (this is the magic)
return foo(user.foo(bar));
}
private String additionalHeavyweightStuff(String asdasd) {
return blubb;
}
}
現在,你可以裝飾一個用戶用下面的代碼:
public static void main(String args[]) {
User user = new concreteUser();
user = new AsdfUserDecorator(user);
user = new QwerUserDecorator(user);
user.foo("sadf");
}
這是一個非常強大的模式,我希望我可以幫助你。
祝您有愉快的一天。
正在執行延遲加載不夠好的解決方案嗎?雖然它的一個建議,延遲加載大多數時間起作用。只需將可選參數標記爲延遲加載即可。 – 2011-02-03 03:54:12