信息专家模式举个例子详细介绍

学习目标:

  • 信息专家模式举个例子详细介绍

学习内容:

信息专家(Information Expert)模式是一种常用的设计模式,用于将某个职责(或功能)赋予拥有该职责所需信息的类。这有助于保持类的高内聚性和低耦合性,从而提高系统的可维护性和可扩展性。

例子:图书馆管理系统

问题描述
在一个图书馆管理系统中,需要计算每个会员的借书总数。系统中包含以下类:

  • LibraryMember(会员类):表示图书馆的会员,包含会员的基本信息。
  • Book(书籍类):表示图书馆中的书籍,包含书籍的基本信息。
  • Loan(借书类):表示会员的借书记录,包含借书的相关信息。

设计解决方案

步骤1:确定职责
需要计算某个会员的借书总数。这意味着我们需要遍历该会员的所有借书记录。

步骤2:选择信息专家
考虑到哪个类拥有计算借书总数所需的信息。显然,LibraryMember类包含会员的基本信息,并且应该能够访问会员的借书记录。

步骤3:实现职责
将计算借书总数的职责赋予LibraryMember类,因为它是拥有借书记录信息的类。

**// 借书类**
public class Loan {
    private Book book;
    private Date loanDate;

    public Loan(Book book, Date loanDate) {
        this.book = book;
        this.loanDate = loanDate;
    }

    public Book getBook() {
        return book;
    }

    public Date getLoanDate() {
        return loanDate;
    }
}
// 会员类
import java.util.List;

public class LibraryMember {
    private String memberId;
    private String name;
    private List<Loan> loans;

    public LibraryMember(String memberId, String name, List<Loan> loans) {
        this.memberId = memberId;
        this.name = name;
        this.loans = loans;
    }

    public String getMemberId() {
        return memberId;
    }

    public String getName() {
        return name;
    }

    public List<Loan> getLoans() {
        return loans;
    }
    // 计算借书总数的方法
    public int getTotalNumberOfLoans() {
        return loans.size();
    }
}
// 书籍类
public class Book {
    private String bookId;
    private String title;

    public Book(String bookId, String title) {
        this.bookId = bookId;
        this.title = title;
    }

    public String getBookId() {
        return bookId;
    }

    public String getTitle() {
        return title;
    }
}

解释

  • Loan类表示一个借书记录,包含书籍信息和借书日期。
  • LibraryMember类表示图书馆的会员,包含会员ID、姓名和借书记录列表(List)。
  • 在LibraryMember类中,添加了一个方法getTotalNumberOfLoans,用于计算该会员的借书总数。

通过将计算借书总数的职责赋予LibraryMember类,我们利用信息专家模式,使职责分配合理,类的设计更加内聚且低耦合。这不仅简化了系统结构,还提高了代码的可维护性和可扩展性。


  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java 猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值