有一个图书馆系统,含有Book和BookMaster两个类。Book可以用来设置书的属性(如title),BookMaster每天做的事情就是根据上级的要求重设设定某些书的title,以增加借阅者的注意力,让更多的人对书有新的兴趣

有一个图书馆系统,含有BookBookMaster两个类。Book可以用来设置书的属性(title)BookMaster每天做的事情就是根据上级的要求重设设定某些书的title,以增加借阅者的注意力,让更多的人对书有新的兴趣。

   有一天,上级需要BookMastersetTitle的操作之前都要在日志中记录一条log。但不幸的是由于一些很特别的原因,没有办法去修改Book类,无法在Book类的setTitle()方法中增加记录log的操作。更不幸的是上级不信任BookMaster自己的统计结果,使BookMaster不能在做setTitle()之前自己做log记录。

 请问如何做才能达到目标,请写出必要的实现代码。 

相关类定义如下: 

public interface Book {

 public void setTitle(String title);

 public String getTitle();

public class BookException extends Exception {

 public BookException() {

  }

public class BookImpl implements Book {

 private String title;

 public void setTitle(String title) {

  this.title = title;

 } 

 public String getTitle() {

  return this.title;

 }

public class BookMaster {

 public static void main(String[] args) {

  Book book = new BookImpl();  

                out.println("set a book’s title today"); // 不能添加这行语句,因为上级不信任BookMaster自己的统计结果

                book.setTitle("I feel good.");

  out.println(book.getTitle());

   }

注:题目中所提供类的定义为Java实现,但您可以根据您的喜好自由选择其它语言完成题目要求。

 

 

题目老长了,看着就有点害怕,我也不知道是不是这样的意思:包中有三个类和一个接口。BookImpl实现了接口。在BookMaster实现对书本书名属性的改写。改写是通过实例化BookImpl来完成的。但是现在要在调用BookImpl之前,先添加一条log记录。这条记录在哪里添加是个问题,因为不能改写Book接口,不能改写BookMaster。怎么办?

    其实我也不知道,其他的=参考文献是http://wenku.baidu.com/view/f3df305177232f60ddcca1b2.html用另一个类BookProxy实现接口,然后在调用它去添加记录,这样就不是BookMaster添加的记录了,那为什么不直接在BookImpl类中去添加记录?

实现代码:

  Book.java

package book;

/**
 * @author zhchyun
 *
 * TODO 要更改此生成的类型注释的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
public interface Book {
   
    public void setTitle(String title);
    public String getTitle();


}

BookException.java

package book;

/**
 * @author zhchyun
 *
 * TODO 要更改此生成的类型注释的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
public class BookException extends Exception{

    public BookException() {
    }

}

BookImpl.java

package book;

/**
 * @author zhchyun
 *
 * TODO 要更改此生成的类型注释的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
public class BookImpl implements Book{

    private String title;
    public void setTitle(String title) {
     this.title = title;
    }
    public String getTitle() {
     return this.title;
    }
}

BookMaster.java

package book;

/**
 * @author zhchyun
 *
 * TODO 要更改此生成的类型注释的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
public class BookMaster {

   
    private String title;
    public void setTitle(String title) {
     this.title = title;
    }
    public String getTitle() {
     return this.title;
    }
    public static void main(String[] args) {
       
        Book book = new BookImpl(); 
        book= new BookProxy(book);
        book.setTitle("I feel good.");
       System. out.println(book.getTitle());

    }
}

BookProxy.java

package book;

/**
 * @author zhchyun
 *
 * TODO 要更改此生成的类型注释的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
public class BookProxy implements Book{

    private Book target;
   
    public BookProxy(Book target){
        this.target=target;
    }
    public String getTitle(){
        return target.getTitle() ;
       
    }
    public void setTitle(String title){
        System.out.println("set a book's title today");
        target.setTitle( title);
       
    }
}

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zhchyun2008

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

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

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

打赏作者

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

抵扣说明:

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

余额充值