java 创建用于查看和编辑的对象

标签 java architecture

问题

我正在构建我的类,因此类的所有者可以编辑信息,但另一个只想从第一个类获取数据的类必须只查看数据而不是编辑它。

示例

我有课restaurant其中包含餐厅的数据,如 name , offers , foods ,拥有餐厅的人可以从餐厅类创建新对象并编辑他的信息。

客户可以从餐厅制作一个对象,但我希望他只是查看该餐厅的数据而不是编辑它。

我尝试过的

  • 使餐厅的构造函数成为私有(private)的,但这意味着餐厅和顾客都不能创建餐厅类的对象。

  • 让餐厅的构造函数获取用户名和密码,在这种情况下,客户将无法创建新的餐厅对象。

我应该使用什么方法来解决我的问题?我的类应该如何,或者必须使用什么设计模式?

如有任何帮助,我们将不胜感激。

编辑

也许这与设计模式有关?我不知道

编辑2

在第一个答案之后,我得到了这个 enter image description here

最佳答案

此问题的典型解决方案是使用 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/

相关文章:

java - 在 Java 中对多个 int/String 数组进行排序而不丢失顺序

java - 为什么对于 Thread 的子类来说吞咽 InterruptedException 是可以的?

java - 将文本文件写入数组,然后在 Java 中返回它

java - 如何在 Java 中使用 Cassandra Map 类型

c# - 需要大规模 .Net MVC 项目的架构建议

java - JavaMail 中的 props.put ("mail.smtp.host", host) 是做什么的?

c# - 如何在c#中实现三层架构

web-services - Remote API/Web Service层MVC的域逻辑和数据访问

oop - 配置系统的设计指南?

.net - 企业规模的 DDD?