我正在编写SDK并希望知道如何更清晰地编写内容。
例如,我有一个GodManager委托类(它将是用户可以与之交互的中心类)(这是伪代码):
public class GodManager {
private CloudApi cloudApi;
private SensorApi sensorApi;
private CacheApi cacheApi;
.
. And about 5 more API classes of similar sorts
.
GodManager() {
cloudApi = new CloudApi();
sensorApi = new SensorApi()
cacheApi = new CacheApi();
}
public void someCloudApiMethodAccess() {
cloudApi.someCloudApiMethodAccess();
}
.
.
. And I have about 25 other methods where GodManager delegates to API classes
.
}
如何通过GodManager允许我的用户访问,但是删除这些只是每个Api类的代理方法的25种方法?
我知道Android Wear可以解决这个问题:
public class Wearable {
public static final com.google.android.gms.wearable.DataApi DataApi;
public static final com.google.android.gms.wearable.MessageApi MessageApi;
public static final com.google.android.gms.wearable.NodeApi NodeApi;
}
您可以在代码中访问这些API:
Wearable.DataApi.getFdForAsset(...)
所以我猜测我可以模仿这个并做类似的事情:
class GodManager {
public static CloudApi CloudApi;
GodManager {
CloudApi = new CloudApi();
}
}
然后在我的实现课程中,我可以:
class ImplClass {
public void method() {
GodManager.CloudApi.someCloudApiMethodAccess()
}
}
我错过了什么吗?会不会有一些尴尬的副作用,我还没考虑过?任何建议都会非常感激,以便清理我的GodManager。
或者也许某人有其他一些我可以看到和学习的例子?
答案 0 :(得分:0)
创建公共字段通常是反模式,尽管有一些legid用法。危险在于,如果用户可以访问您的字段,它可以使用它进行任何操作。
如果CloudApi
包含它自己的公共方法或公共字段,那么用户不应该捣乱,那么解决方法就是创建一个庞大的委托类。如果您完全控制CloudApi
,并且/或者您可以确保只有公共成员是可以安全,无条件地被其他人访问的成员,那么您可以将该实例公开。 (这是legid使用)
(请注意,将成员设为私有并为返回实例的方法创建公共getter,完全相同!)
即便如此,您仍然限制自己,因为您正在定义您的API(GodManager
)并且您正在阻止自己延长所引用实例的EVER扩展功能。例如,您可能希望同步拨打CloudApi
,或检查参数有效性,但不想(或可以)更改CloudApi
。如果您有委托方法,则可以在不更改GodManager
API的情况下扩展功能,并且现有用户不会中断。