Java 上下文敏感表示的设计模式

Java 上下文敏感表示的设计模式,java,design-patterns,Java,Design Patterns,问题 是否有一种设计模式允许我创建类的上下文敏感表示 定义 表示:可用的getter及其返回的值 上下文:对象的请求上下文 示例 网站发布房屋出售 来宾用户拥有House.getPrice(),它为House X返回100000 注册用户拥有House.getPrice(),它为House X返回95000 注册用户有House.getLandorEmail(),而来宾用户没有 目的 该服务的实际用途是使用Rest服务,通过JAX-B使用到XML/JSON的自动映射 注意 我不是要代码来实现这个

问题

是否有一种设计模式允许我创建类的上下文敏感表示

定义

表示:可用的getter及其返回的值

上下文:对象的请求上下文

示例

网站发布房屋出售

来宾用户拥有
House.getPrice()
,它为House X返回100000

注册用户拥有
House.getPrice()
,它为House X返回95000

注册用户有House.getLandorEmail(),而来宾用户没有

目的

该服务的实际用途是使用Rest服务,通过JAX-B使用到XML/JSON的自动映射

注意

我不是要代码来实现这个。我只是想知道这是否有一个设计模式以及它的名称。

我想说的是,和都很好地应用

例如,这里有一个例子


为什么你不能有一个
工厂或类似的工厂来生产
IHouse
实现。然后,您可以使用诸如
RegisteredUserHouse
GuestUserHouse
之类的实现来封装您描述的逻辑


然后根据用户是否注册,选择从工厂返回的实现。

我认为您在这里尝试解决两个不同的任务

如果您需要根据用户是否注册而仅向用户显示房屋的部分信息,那么您应该在表示层中执行此操作(在生成界面和应用安全约束时),而不是将其拖到域层中


当您需要根据用户是否注册而应用特定的价格或折扣策略时,这似乎是一个域层问题,应该通过策略模式来解决。

非常实用且易于实现。在我看来,待售房屋域模型(这是一个真实世界概念的模型)似乎很奇怪与用户注册状态(这是互联网营销的一个概念)紧密耦合。你在
RegisteredUserHouse
GuestUserHouse
类中混合的这两个不相关的领域概念难道不是吗?@SergeyPetunin I只是提出了一种方法,并给出了一个可能的工作示例。这些类的名称只是示例,可能并不现实。我觉得很奇怪,注册用户买房子会打折。为了节省5000英镑买房,我会加入一个网站。也许这是另一种模式。是的,我认为装饰师是一个很好的方法。我不明白策略模式是如何应用的,但我同意decorator看起来很有前途(实际上很像我已经想到的),策略可以应用于基于不同定价模型的价格计算。