gpt4 book ai didi

oop - 什么是 "loose coupling?"请提供示例

转载 作者:行者123 更新时间:2023-12-03 04:17:20 27 4
gpt4 key购买 nike

我似乎无法理解“松散耦合”的概念。我认为“松散”这个词通常具有负面含义,这没什么帮助,所以我总是忘记松散耦合是一件好事

有人可以展示一些“之前”和“之后”代码(或伪代码)来说明这个概念吗?

最佳答案

考虑一个简单的购物车应用程序,它使用 CartContents类来跟踪购物车中的商品和 Order用于处理购买的类。 Order需要确定购物车中内容的总值(value),它可能会这样做:

紧密耦合示例:

public class CartEntry
{
public float Price;
public int Quantity;
}

public class CartContents
{
public CartEntry[] items;
}

public class Order
{
private CartContents cart;
private float salesTax;

public Order(CartContents cart, float salesTax)
{
this.cart = cart;
this.salesTax = salesTax;
}

public float OrderTotal()
{
float cartTotal = 0;
for (int i = 0; i < cart.items.Length; i++)
{
cartTotal += cart.items[i].Price * cart.items[i].Quantity;
}
cartTotal += cartTotal*salesTax;
return cartTotal;
}
}

请注意 OrderTotal 如何方法(以及 Order 类)取决于 CartContents 的实现细节和 CartEntry类。如果我们试图改变这个逻辑以允许折扣,我们可能必须更改所有 3 个类别。另外,如果我们改为使用 List<CartEntry>集合来跟踪我们必须更改的项目 Order类也是如此。

现在有一个稍微更好的方法来完成同样的事情:

耦合较少的示例:

public class CartEntry
{
public float Price;
public int Quantity;

public float GetLineItemTotal()
{
return Price * Quantity;
}
}

public class CartContents
{
public CartEntry[] items;

public float GetCartItemsTotal()
{
float cartTotal = 0;
foreach (CartEntry item in items)
{
cartTotal += item.GetLineItemTotal();
}
return cartTotal;
}
}

public class Order
{
private CartContents cart;
private float salesTax;

public Order(CartContents cart, float salesTax)
{
this.cart = cart;
this.salesTax = salesTax;
}

public float OrderTotal()
{
return cart.GetCartItemsTotal() * (1.0f + salesTax);
}
}

特定于购物车订单项、购物车集合或订单的实现的逻辑仅限于该类。因此,我们可以更改任何这些类的实现,而不必更改其他类。我们可以通过改进设计、引入接口(interface)等进一步实现这种解耦,但我认为您已经明白了这一点。

关于oop - 什么是 "loose coupling?"请提供示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/226977/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com