今天去面试,得到的题目是:
1、从一个文档中读取内容(文档内容为1-10十个数字,一个数字一行),输出到另外一个文档,输出格式为(1,2,3,...,10)
2、数据库中存储了10条记录,一列,也是1-10,一个数字一条记录,读出,也输出到一个文档,格式同第一题。
题目的要求是:怎么样设计类,使在开发过程中第一题变到第二题的修改部分较少,代码复用率低。
附加:如果是输出到文档,改为输出到数据库的话,怎么设计。
:cry: 学得不精,只想到了用继承来解决这个问题。
还有什么别的设计思路呢?
public interface Reader {
public void reade();
}
public interface Writer {
public void write();
}
public class DBReader implements Reader {}
public class FileReader implements Reader {}
public class DBWriter implements Writer {}
public class FileWriter implements Writer {}
public class Manager{
Reader reader;
Writer writer;
}
这样可以达到reader,writer的任意组合,交给客户端决定
一个类10个属性 搞定这个问题 横竖都能用.
部分冗余扩充了拓展空间, 哈哈 当然只能正对这种横竖业务.
有一个负责读数据的父类A,数据源为文件的一个类继承自这个父类,数据源为数据库的同样继承这个父类
有一个负责转换数据的类X,这里可能不需要转换,但是最好有这个类,专门负责数据加工的,此类应该有两个变量A a和B b
有一个负责写数据的父类B,目标为文件的一个类继承自这个父类,目标位数据库的同样继承这个父类
实际调用的时候,通过X来实现
设计模式中可能叫代理模式
[url]http://dl.iteye.com/upload/picture/pic/82195/2c5ea259-eaa8-362d-9147-3080ebe8beda.jpg[/url]
[img]http://dl.iteye.com/upload/picture/pic/82195/2c5ea259-eaa8-362d-9147-3080ebe8beda.jpg[/img]
[quote]有一个负责读数据的父类A,数据源为文件的一个类继承自这个父类,数据源为数据库的同样继承这个父类
有一个负责转换数据的类X,这里可能不需要转换,但是最好有这个类,专门负责数据加工的,此类应该有两个变量A a和B b
有一个负责写数据的父类B,目标为文件的一个类继承自这个父类,目标位数据库的同样继承这个父类
实际调用的时候,通过X来实现
设计模式中可能叫代理模式 [/quote]
描述的好像适配器.
两个数据源的转换适配器用处很大. 貌似楼主的问题是设计类
属于需求分析阶段.
一个interface,两个interfaceimpl。
第一个interfaceimpl实现第一题功能,第二个实现第二题功能。
再写一个util工具类,负责格式化输入到另一个文档的格式。
两个interfaceimp获取数据后调用格式化工具类format的方法。
实体类均用面向对象,设每一行为一个属性。
:oops: 我技术就这样了..拿出来丢人了...
我认为可以使用桥接模式,因为题目有两个变化的维度,一个是输入,一个是输出。
你可以看下桥接模式,应该可以解决这个问题。
采用继承的话,就可以用模板模式。
但我建议采用策略模式。
将两种读取数据的方式抽象为一个接口,接口返回List这个接口有2个实现类,这两个实现类实际上就是2个不同的取数算法。
context上下文定义为一个类,这个类中含有相同的逻辑如输出到文档中,如果输出也有不同的方式,也要定义一个接口,同样采用策略模式,不同的实现类,输出到文档一个实现类,输出到数据库一个实现类。
context中可以动态注入不同的实现类,从而可以实现算法的运行时替换。
桥接模式和策略模式有点,但是桥接模式的context可以有不同的实现类或者子类,但是策略的context只有一个类
public interface Reader {
public void reade();
}
public interface Writer {
public void write();
}
public class DBReader implements Reader {}
public class FileReader implements Reader {}
public class DBWriter implements Writer {}
public class FileWriter implements Writer {}
public class Manager{
Reader reader;
Writer writer;
}
这样可以达到reader,writer的任意组合,交给客户端决定
href说的对,企业应该是出于复用性的考虑,建议方法内加入参数!
原则就是高内聚、低耦合。把read、process、write分离开。