适配器设计模式:公开Adapter类的专用适配器实例,但客户端代码除外?

时间:2019-03-27 19:04:38

标签: design-patterns client adapter

除了客户端代码外,是否有任何方法可以在需要时在Adapter类中公开私有适配器实例?

详细说明,在某些情况下,我想向公众公开适配器的适配器实例,但我不想使用客户端代码来实现。因此,在Adapter类中编写像这样的方法是否合适:

<div v-for="review in reviews" class="box">{{review.review_id}}</div>

<script>
export default {
  props: ["id"],
  data() {
    return {
      name_org: "",
      picture: "",
      headerpic: "",
      description: "",
      reviews: [],
      review: {
        review_id: "",
        org_id: "",
        user_id: "",
        description: ""
      }
    };
  },
  mounted() {
    axios.get("/api/listorgs/" + this.id).then(response => {
      var listorg = response.data;
      this.name_org = listorg.name_org;
      this.picture = listorg.picture;
      this.description = listorg.description;
      this.headerpic = listorg.headerpic;
    });
  },
};
</script>

enter image description here

1 个答案:

答案 0 :(得分:2)

这称为公开代理人。尽管这在一些案例中是有效的(超出了此答案的范围),但这通常是不明智的,因为它违反了Demeter法则,因此封装。我不推荐它。任何抽象背后的核心思想是隐藏细节。适配器模式没有什么不同。在这种情况下,我们将委托人的接口隐藏在客户期望的接口后面。将委托暴露给客户将允许绕过此抽象,从而使其承担多个相互矛盾的责任-这不是一个好的设计决策。

如果客户端需要委托人以及适配器,那应该没有问题,因为无论如何,客户机会将委托实例传递给适配器的构造函数。现在,如果您说其他客户端需要访问相同的委托实例,那么这是一个完全不同的问题,您可以使用其他模式/解决方案(单例或将实例提升为公共依赖项)。

无论如何,我希望这会有所帮助!