除了客户端代码外,是否有任何方法可以在需要时在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>
答案 0 :(得分:2)
这称为公开代理人。尽管这在一些案例中是有效的(超出了此答案的范围),但这通常是不明智的,因为它违反了Demeter法则,因此封装。我不推荐它。任何抽象背后的核心思想是隐藏细节。适配器模式没有什么不同。在这种情况下,我们将委托人的接口隐藏在客户期望的接口后面。将委托暴露给客户将允许绕过此抽象,从而使其承担多个相互矛盾的责任-这不是一个好的设计决策。
如果客户端需要委托人以及适配器,那应该没有问题,因为无论如何,客户机会将委托实例传递给适配器的构造函数。现在,如果您说其他客户端需要访问相同的委托实例,那么这是一个完全不同的问题,您可以使用其他模式/解决方案(单例或将实例提升为公共依赖项)。
无论如何,我希望这会有所帮助!