4 changed files with 152 additions and 0 deletions
@ -0,0 +1,59 @@ |
|||
package com.cctv.news.model; |
|||
|
|||
public class Article { |
|||
private String title; |
|||
private String url; |
|||
private String publishTime; |
|||
private String content; |
|||
|
|||
public Article() { |
|||
} |
|||
|
|||
public Article(String title, String url, String publishTime, String content) { |
|||
this.title = title; |
|||
this.url = url; |
|||
this.publishTime = publishTime; |
|||
this.content = content; |
|||
} |
|||
|
|||
public String getTitle() { |
|||
return title; |
|||
} |
|||
|
|||
public void setTitle(String title) { |
|||
this.title = title; |
|||
} |
|||
|
|||
public String getUrl() { |
|||
return url; |
|||
} |
|||
|
|||
public void setUrl(String url) { |
|||
this.url = url; |
|||
} |
|||
|
|||
public String getPublishTime() { |
|||
return publishTime; |
|||
} |
|||
|
|||
public void setPublishTime(String publishTime) { |
|||
this.publishTime = publishTime; |
|||
} |
|||
|
|||
public String getContent() { |
|||
return content; |
|||
} |
|||
|
|||
public void setContent(String content) { |
|||
this.content = content; |
|||
} |
|||
|
|||
@Override |
|||
public String toString() { |
|||
return "Article{" + |
|||
"title='" + title + '\'' + |
|||
", url='" + url + '\'' + |
|||
", publishTime='" + publishTime + '\'' + |
|||
'}'; |
|||
} |
|||
} |
|||
@ -0,0 +1,43 @@ |
|||
package com.cctv.news.controller; |
|||
|
|||
import com.cctv.news.command.Command; |
|||
import com.cctv.news.view.OutputView; |
|||
|
|||
import java.util.HashMap; |
|||
import java.util.Map; |
|||
|
|||
public class CommandController { |
|||
private final Map<String, Command> commands; |
|||
private final OutputView view; |
|||
|
|||
public CommandController(OutputView view) { |
|||
this.view = view; |
|||
this.commands = new HashMap<>(); |
|||
} |
|||
|
|||
public void registerCommand(Command command) { |
|||
commands.put(command.getName(), command); |
|||
} |
|||
|
|||
public void executeCommand(String input) { |
|||
if (input == null || input.trim().isEmpty()) { |
|||
view.showError("命令不能为空"); |
|||
return; |
|||
} |
|||
|
|||
String[] parts = input.trim().split("\\s+"); |
|||
String commandName = parts[0]; |
|||
String[] args = parts.length > 1 ? java.util.Arrays.copyOfRange(parts, 1, parts.length) : new String[0]; |
|||
|
|||
Command command = commands.get(commandName); |
|||
if (command != null) { |
|||
try { |
|||
command.execute(args); |
|||
} catch (Exception e) { |
|||
view.showError("执行命令时出错: " + e.getMessage()); |
|||
} |
|||
} else { |
|||
view.showError("未知命令: " + commandName + ",输入 help 查看可用命令"); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,41 @@ |
|||
package com.cctv.news.view; |
|||
|
|||
public class ConsoleView implements OutputView { |
|||
private static final String ANSI_RESET = "\033[0m"; |
|||
private static final String ANSI_CYAN = "\033[36m"; |
|||
private static final String ANSI_RED = "\033[31m"; |
|||
private static final String ANSI_GREEN = "\033[32m"; |
|||
private static final String ANSI_MAGENTA = "\033[35m"; |
|||
private static final String ANSI_YELLOW = "\033[33m"; |
|||
|
|||
private static final String PREFIX_INFO = ANSI_CYAN + "[INFO]" + ANSI_RESET + " "; |
|||
private static final String PREFIX_ERROR = ANSI_RED + "[ERROR]" + ANSI_RESET + " "; |
|||
private static final String PREFIX_ARTICLE = ANSI_GREEN + "[ARTICLE]" + ANSI_RESET + " "; |
|||
|
|||
@Override |
|||
public void showMessage(String message) { |
|||
System.out.println(PREFIX_INFO + message); |
|||
} |
|||
|
|||
@Override |
|||
public void showError(String error) { |
|||
System.out.println(PREFIX_ERROR + error); |
|||
} |
|||
|
|||
@Override |
|||
public void showArticles(String articles) { |
|||
System.out.println(PREFIX_ARTICLE + articles); |
|||
} |
|||
|
|||
@Override |
|||
public void showWelcome() { |
|||
System.out.println(ANSI_MAGENTA + "========================================" + ANSI_RESET); |
|||
System.out.println(ANSI_MAGENTA + " 央视新闻爬虫 v1.0" + ANSI_RESET); |
|||
System.out.println(ANSI_MAGENTA + "========================================" + ANSI_RESET); |
|||
} |
|||
|
|||
@Override |
|||
public void showPrompt() { |
|||
System.out.print(ANSI_YELLOW + "请输入命令>" + ANSI_RESET + " "); |
|||
} |
|||
} |
|||
@ -0,0 +1,9 @@ |
|||
package com.cctv.news.view; |
|||
|
|||
public interface OutputView { |
|||
void showMessage(String message); |
|||
void showError(String error); |
|||
void showArticles(String articles); |
|||
void showWelcome(); |
|||
void showPrompt(); |
|||
} |
|||
Loading…
Reference in new issue