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