装饰者模式详解

个人理解装饰者模式: 1.装饰者模式的本质,就是按开闭原则去写,在不改变原有的类,而去拓展新的类,增加新的功能

例子

// Book 继承 IBook
public class Book extends IBook {


    @Override
    void borrowBook() {
        System.out.println(getBookName() + "被借了");
    }

    @Override
    void returnBook() {
        System.out.println(getBookName() + "归还了");
    }
}


// 新建一个抽象类 
public abstract class IBook {

    private String bookName;

    abstract void borrowBook();

    abstract void returnBook();

    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }
    
}

public class NewBook {

    /**
     * 注意了,核心代码就是这段,使用组合的方式扩展Book
     * 根据开闭原则:不改变原有的类(不改变Book 的基础新建一个 NewBook类)
     * 在NewBook 类上扩展功能(比如: freeze() 和   lose() )
     * 不用继承的方式继承Book,用组合的方式持有Book, 既有Book的功能,有可以扩展新功能
     */
    private IBook iBook;

    private void setIBook(IBook iBook) {

        this.iBook = iBook;
    }

    public void freeze() {
        System.out.println(iBook.getBookName() + "冻结了");
    }

    public void lose() {
        System.out.println(iBook.getBookName() + "丢失了");
    }

    // 这里可以用委托方式去实现Book 的两个方法
    // 阅读起来会更好,但是这里主要要让各位把装饰者模式看起来更清晰
    // 所以注释了
//    public void borrowBook() {
//        iBook.borrowBook();
//    }
//
//
//    public void returnBook() {
//        iBook.returnBook();
//    }

}
   public static void main(String[] args) {

//        IBook iBook = new Book();
//        iBook.setBookName("《设计者模式》  ");

// 看到没,在Book原有的基础上,新扩展NewBook ,
// 不影响原有的类,也遵循开闭原则,用组合的方式
        NewBook newBook = new NewBook();

        newBook.setIBook(new Book());

        newBook.iBook.setBookName("《设计者模式》  ");


        newBook.iBook.borrowBook();


        newBook.lose();
        newBook.freeze();

        newBook.iBook.returnBook();
    }
}

在这里插入图片描述

这里最主要的就是 NewBook类中的IBook 变量,仔细阅读下面的话
/**
* 注意了,核心代码就是这段,使用组合的方式扩展Book
* 根据开闭原则:不改变原有的类(不改变Book 的基础新建一个 NewBook类)
* 在NewBook 类上扩展功能(比如: freeze() 和 lose() )
* 不用继承的方式继承Book,用组合的方式持有Book, 既有Book的功能,有可以扩展新功能
*/
private IBook iBook;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值