我必须在java应用程序中实现输出显示模块。它有三种输出格式,HTML,CSV和.txt。
输入格式有两种类型: ArrayList
或HashMap
。
我必须有效地使用OOPS实现这一点,并为每种类型的输出功能定义接口。我想知道是否有更好的方法来实现这一点。
到目前为止我尝试过的伪代码是:
OutputDisplayInterface
{
public void TextDisplay();
public void CSVDisplay();
public void HTMLDisplay();
}
TextDisplayInterface
{
public void maptotext();
public void listtotext();
}
TextDisplayClass implements TextDisplayInterface{
\\method implementations
}
CSVDisplayInterface
{
public void maptocsv();
public void arraylisttocsv();
}
CSVDisplayClass implements CSVDisplayInterface{
\\method implementations
}
HTMLDisplayInterface
{
public void maptoHTML();
public void arraylisttoHTML();
}
HTMLDisplayClass implements HTMLDisplayInterface{
\\method implementations
}
OutputDisplayClass implements OutputDisplayInterface
{
public void TextDisplay(){
TextDisplay t = new TextDisplayClass();
t.maptotext();
t.listtotext();
}
public void CSVDisplay(){
CSVDisplay t = new TextDisplayClass();
t.maptocsv();
t.listtocsv();
}
....
}
如果我在main函数中调用TextDisplay()
,将调用方法maptotext()
和listtotext()
,实际上我只希望其中一个按照输入数据执行类型(即hashmap
或list
)。
答案 0 :(得分:0)
我从多态性的角度回答:
OutputDisplayInterface
{
public void TextDisplay();
public void CSVDisplay();
public void HTMLDisplay();
}
我不认为上述内容有用,因为显示text
,csv
和html
是不同的实现。你不会用这个来实现多态性。我会建议下面(伪代码)(我假设输入将被传入。)
这是任何展示元素的合约。它采用显示方法,采用List
和Map
。
DisplayInterface {
display(ArrayList list); //Or just List to be better
display(HashMap map); //Or just Map to be better
}
上面有三种实现
TextDisplay {
display(ArrayList list) {..}
display(HashMap map) {..}
}
CSVDisplay {
display(ArrayList list) {..}
display(HashMap map) {..}
}
HTMLDisplay {
display(ArrayList list) {..}
display(HashMap map) {..}
}
注意:应避免使用List
等原始类型,ArrayList
。根据您的用例使用泛型类型。
<强>用法:强>
DisplayInterface displayInterface = new TextDisplay();
displayInterface.display(list); //This invokes the method that takes a list.
//OR
displayInterface.display(map); //This invokes the method that takes a map.
答案 1 :(得分:0)
我会做这样的事情:
interface Output {
String text();
}
interface HtmlListOutput implements Output {
private final ArrayList list;
//ctor
@Override
public String text() {
//list to html text
}
}
interface HtmlMapOutput implements Output {
private final HashMap map;
//ctor
@Override
public String text() {
//map to html text
}
}
//proxy/delegate class
class HtmlOutput implements Output {
private Output origin;
public HtmlOutput(ArrayList list) {
this.origin = new HtmlListText(list);
}
public HtmlOutput(HashMap map) {
this.origin = new HtmlMapText(map);
}
@Override
public String text() {
return origin.text();
}
}
与CSV和.txt相同。