问题
我正在构建我的类,因此类的所有者可以编辑信息,但另一个只想从第一个类获取数据的类必须只查看数据而不是编辑它。
示例
我有课restaurant
其中包含餐厅的数据,如 name
, offers
, foods
,拥有餐厅的人可以从餐厅类创建新对象并编辑他的信息。
客户可以从餐厅制作一个对象,但我希望他只是查看该餐厅的数据而不是编辑它。
我尝试过的
使餐厅的构造函数成为私有(private)的,但这意味着餐厅和顾客都不能创建餐厅类的对象。
让餐厅的构造函数获取用户名和密码,在这种情况下,客户将无法创建新的餐厅对象。
我应该使用什么方法来解决我的问题?我的类应该如何,或者必须使用什么设计模式?
如有任何帮助,我们将不胜感激。
编辑
也许这与设计模式有关?我不知道
编辑2
在第一个答案之后,我得到了这个
最佳答案
此问题的典型解决方案是使用 2 个接口(interface)。对于读取
操作,我们将其称为RestourantDataRetriever
;对于读/写操作,我们将其称为RestourantDataAccessor
,例如
interface RestourantDataRetriever {
String getName();
Person getCheif();
Address getAddress();
}
interface RestourantDataAccessor extends RestourantDataRetriever {
void setName(String name);
void setCheif(Person chief);
Address setAddress(Address address);
}
请注意访问器扩展了检索器,因此它也可以检索数据。
现在所有者将与 RestaurantDataAccessor
合作,并且拥有对餐厅数据的完全访问权限。然而,其他类将与 RestourantDataRetriever 一起使用,并且具有只读访问权限。
这不是安全的解决方案。您无法避免有人从 RestourantDataRetriever
转换为 RestourantDataAccessor
并使用完整功能。如果您需要安全的解决方案,请查看 AspectJ 或其他类似的解决方案。
关于java 创建用于查看和编辑的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16261030/