面向对象开发中的依赖

举报
码乐 发表于 2025/03/29 09:13:49 2025/03/29
60 0 0
【摘要】 1 简介依赖假设类 A 的变化导致类 B 的变化,然后假设类 B 依赖于类 A。也称为 using 关系,这意味着一个类依赖于另一个类.在大多数情况下,依赖项反映在使用另一个类的 object 作为 parameter 的类的方法中。依赖关系是一种 “使用” 关系。特定事物的更改可能会影响使用它的其他事物,并在需要指示一个事物使用另一个事物时使用依赖项。例如:汽车依赖汽油。如果没有汽油,汽...

1 简介

依赖假设类 A 的变化导致类 B 的变化,然后假设类 B 依赖于类 A。也称为 using 关系,这意味着一个类依赖于另一个类.

在大多数情况下,依赖项反映在使用另一个类的 object 作为 parameter 的类的方法中。
依赖关系是一种 “使用” 关系。特定事物的更改可能会影响使用它的其他事物,并在需要指示一个事物使用另一个事物时使用依赖项。例如:汽车依赖汽油。如果没有汽油,汽车将无法行驶。

1743209838233.jpg

2 示例

依赖关系定义为两个类之间的关系,其中一个类依赖于另一个类,但另一个类可能依赖于第一个类,也可能不依赖于第一个类。因此,其中一个类中的任何更改都可能影响另一个类的功能,这取决于第一个类。

例如,我们有一个 Customer 类和一个 Order 类。当我们需要保存新订单时,我们需要保存与客户对应的订单。为此,我们的 Order 类需要对 Customer 类的引用并保存其数据。

所以在这种情况下,我们的 Order 类依赖于 Customer 类。将来,如果对 Customer 类进行了任何更改,则可能会导致对 Order 类的更改。

  public class customer
  { 	public Guid customerId {get; set;}
  public string customerName {get; set;}
  		// 0ther customer related functions & properties
  	}
   public class Order
   {
  public Int32 orderId {get; set; }
  public Guid ordercustomerId {get; set;}
  public DateTime orderDateTime {get; set;}
  // 0ther Order functions & properties
  public Order(customer customer)
  		{
  		//Save order with customerId
  		this.OrderCustomerId= customer.CustomerId;
  		}
  }

依赖表示一个类使用另一个类,但并非永久关联,通常是方法参数或局部变量。

比如日志的实现代码

	type Logger struct{}

	func (l *Logger) Log(message string) {
		fmt.Println("Log:", message)
	}

	type OrderService struct{}

	func (os *OrderService) CreateOrder(orderID string, logger *Logger) {
		logger.Log("Order created with ID: " + orderID) // 依赖:使用 Logger,但不持有其引用
	}

	func main() {
		logger := &Logger{}
		service := &OrderService{}

		service.CreateOrder("12345", logger)
	}

3 小结

在上面的示例中,如果我们比如将 CustomerId 的数据类型从 GUID 更改为整数,它将影响 Order 类,

或者Log方法的fmt换成写文件和数据库将会影响整个类。这种关系称为 Dependency,在 UML 表示中由以下符号表示

image.png

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。