- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在学习面向对象设计时,我正在批判性地评判自己的设计。这个框架应该能够以 XML 或 JSON 格式打印对象,我已经在一个基本实现中 stub 了,以避免现在深入了解 XML 和 Json 解析器 api 的细节。
所以我将Formatter
作为基类。但根据我当前的设计,该基类的所有派生类都需要知道它们必须调用:getFormattedValue()
才能获取输出。另外,我对 Formatter
构造函数中的所有这些 if else
语句感到不舒服。客户端需要知道在此类的所有派生类中传递“xml”或“json”。我如何改进这个设计以符合所有面向对象的设计原则?提前致谢..
public class Formatter {
private String output;
public Formatter(Object object, String formatType){
if(formatType.equals("xml")){
output = getXMLFormat(object);
} else if(formatType.equals("json")) {
output = getJSONFormat(object);
}
}
private String getXMLFormat(Object object){
return "<title>"+object.toString()+"<title>"; // simplified
}
private String getJSONFormat(Object object){
return "{"+object.toString()+"}"; // simplified
}
protected String getFormattedValue(){
return output;
}
}
派生类:
public class ItemFormatter extends Formatter {
public ItemFormatter(Employee item, String formatOutput) {
super(item, formatOutput);
}
public void printItem(){
System.out.println(getFormattedValue());
}
}
最佳答案
将格式化拆分为多个类/接口(interface),并使用工厂/工厂方法以获得适当的格式化程序。它可能看起来像这样:
public interface Formatter {
String getFormattedValue();
}
并实现一个 JsonFormatter:
public class JSonFormatter implements Formatter {
String getFormattedValue(Object object) {
return "{"+object.toString()+"}";
}
}
获取正确的格式化程序:
public class FormatterFactory {
public static Formatter getFormatter(String type) { // maybe use enum to decide
if (type.equals("json") {
return new JSonFormatter();
} else if (type.equals("xml")) {
return new XMLFormatter();
}
return new DefaultFormatter(); // returns toString for example
}
}
最后的用法:
String formattedXML = FormatterFactory.getFormatter("xml").getFormattedValue("foobar");
关于java - 改进对象格式化程序 API 的类层次结构设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25380855/
我正在尝试将多个水平链接的 Button 和 TextView 垂直链接为 View 集,但仍保持平面 View 层次结构。这是我的初始布局和代码:
到目前为止,我已经在Google BigQuery上训练了几种模型,目前我需要查看模型的外观(即架构,损失函数等)。 有没有办法获取这些信息? 最佳答案 仔细阅读文档后,我可以说该功能尚不存在。我什至
本文实例讲述了PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)。分享给大家供大家参考,具体如下: 前言: 深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个
我是一名优秀的程序员,十分优秀!