您的位置:首页 > 其它

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

2010-10-01 22:03 603 查看
有一个图书馆系统,含有Book和BookMaster两个类。Book可以用来设置书的属性(如title),BookMaster每天做的事情就是根据上级的要求重设设定某些书的title,以增加借阅者的注意力,让更多的人对书有新的兴趣。
有一天,上级需要BookMaster在setTitle的操作之前都要在日志中记录一条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);

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐