有一个图书馆系统,含有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);
}
}
有一天,上级需要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);
}
}
相关文章推荐
- 用JAVA创建一个日期类MyDate,要求可以设置日期,增加日期以及输出日期
- 编写一个多线程函数实现对数组排序,要求: 1.至少用两个线程 2.数组的元素值可以事先定义好,或者可以从键盘输入(增加一个线程)。 3.用一个线程对数组排序,用另一个线程输出排序结果。 4.保证先排好序,再输出。
- 定义一个“点”(Point)类用来表示三维空间中的点(有三个坐标)。要求如下: (1)可以生成具有特定坐标的点对象。 (2)提供可以设置三个坐标的方法。 (3)提供可以计算该“点”距原点距离平方的方法。 (4)编写主类程序验证。
- 作业题,编写两个类:A和B,A创建的对象可以计算两个正整数的最大公约数,B创建的对象可以计算两个数的最小公倍数,要求:B类中有一个成员变量是A类声明的对象
- elasticsearch的store属性跟_source字段——如果你的文档长度很长,存储了_source,从_source中获取field的代价很大,你可以显式的将某些field的store属性设置为yes,否则设置为no
- 编写一个Book类,该类至少有name和price两个属性
- 一个正整数有可能可以表示为n(n>=2)个连续的正整数之和,如:15=1+2+3+4+5,15=4+5+6,15=7+8 请编写程序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列。
- 针对一个XML,如果不想使用任何第三方控件,只是使用wxString,设置属性可以用一下方法来操作
- java通过封装编写Book类。要求:类具有属性书名、书号、主编、出版社、出版时间、页数、价格,其中页数不能少于200页,否则输出错误信息,并强制赋默认值200;为各属性设置赋值和取值方法;具有方法d
- 作业2:设计并测试一个名为Rectangle的矩形类,其属性为矩形的左下角与右上角两个点的坐标,根据坐标能计算出矩形的面积
- UISegmentedControl好多属性设置在iOS7.0之后都失去了失效---也就是“过期了”! iOS7.0之后我们可以用以下方法!
- C++设计并测试一个名为Rectangle的矩形类,其属性为矩形的左下角与右下角两个点的坐标,根据坐标计算矩形的面积
- 1.首先描述下自定义控件的一般方法: 自定义控件是被创造出来,所以先要复写它三个的构造方法,根据需求决定复写哪个,若没有自定义属性,复写只有一个参数的即可。若有自定义属性,则可以通过obtainSty
- android中的一个属性动画,可以显示更多的一个案例
- 编程验证哥德巴赫猜想:任意一个充分大的偶数,可以用两个素数之和表示。如: 4 = 2 + 2 6 = 3 + 3。 **输入格式要求:"%d" 提示信息:"Input a number:\n"
- UILabel设置属性字符串,可以增加点击事件点击
- 一个空间可以放两个或者更多个网站的方法
- 关闭 浏览器 文本框自己的提示 设置一个属性就可以
- 编写一个Book类,该类至少有name和price两个属性。该类要实现Comparable接口,在接口的compareTo()方法中规定两个Book类实例的大小关系为二者的price属性的大小关系。在
- 通过命令行设置一个系统属性的值