sách gpt4 ai đã đi

java - 组合、转发和包装

In lại 作者:行者123 更新时间:2023-12-01 14:29:00 30 4
mua khóa gpt4 Nike

关于“优先组合而不是继承”的问题,我的老师是这样说的:

  • 组合:现有类成为新类的组件
  • 转发:新类中的每个实例方法,在现有类的包含实例上调用相应的方法并返回结果
  • 包装器:新类封装了现有的

  • 这三个概念我不是很了解,所以尝试写下一些代码:
    //Composition is this
    Class A{
    public void doSomething(){
    //do some code
    }
    }

    Class B{
    A a = new A();
    public void doOther(){
    a.doSomething(); //this is forwarding
    }
    }

    那么什么是包装呢?

    1 Câu trả lời

    你的第一个例子不是组合。

    Composition是 2 个对象之间的“has-a”关系,其中一个对象(组合对象)是另一个(所有者)的字段成员。

    组成将是:

    class DemoA {
    DemoB b; //composition
    }

    我们会说“DemoA 由 DemoB 组成”。

    nếu như DemoB对象在 DemoA 时仍然可用变得不可达,我们考虑 DemoB成为 aggregated .例如,尽管 key 环可能已被破坏,但仍然可以使用 key 。 key 环将由 key 组成,但不拥有它们,这表示聚合。

    您的转发示例看起来不错,尽管要求确实说“返回结果”,这可能表明方法不应为空:
    class DemoA {
    private DemoB b;

    public int doSomething() {
    return b.doSomething(); //forwarding/delegating
    }
    }

    至于包装器,它们封装了对象的行为,暴露了新的(通常是更复杂的)行为。一个例子是 DataInputStream ,它包装了一个 InputStream让您阅读 Sợi dây对象和更多,当 InputStream只能处理原始数据。
    class DemoB {
    public int read() {
    //...Read one int of data
    }
    }

    class DemoA {
    private DemoB b;

    public DemoA(DemoB b) {
    this.b = b;
    }

    public List readUntil(List dataList, Supplier condition) {
    while(condition.get())
    dataList.add(b.read());

    return dataList;
    }
    }

    在本例中, DemoA包裹 DemoB揭露 readUntil行为,某事 DemoB做不到。

    这是一个有点愚蠢的例子,但希望能表达出这一点:我们的 DemoB object 不能执行我们需要的行为 (readUntil),因此我们将其包装在为我们处理行为的类型中,因此我们不会不断重写此类行为。

    关于java - 组合、转发和包装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42029992/

    30 4 0
    Bài viết được đề xuất: java - 使用 Java ASM 删除方法
    Bài viết được đề xuất: java - 在 Spring boot fat jar 中读取文件
    Bài viết được đề xuất: java - 如何仅在构造函数中初始化变量一次?
    Bài viết được đề xuất: java - 对 AWS Spring Boot 配置文件进行单元测试 - 可能吗?
    行者123
    Hồ sơ cá nhân

    Tôi là một lập trình viên xuất sắc, rất giỏi!

    Nhận phiếu giảm giá Didi Taxi miễn phí
    Mã giảm giá Didi Taxi
    Giấy chứng nhận ICP Bắc Kinh số 000000
    Hợp tác quảng cáo: 1813099741@qq.com 6ren.com