Initial commit
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
package ch.zhaw.prog2.application;
|
||||
/**
|
||||
* Most basic interface for observing an object
|
||||
* @author bles
|
||||
*
|
||||
*/
|
||||
public interface IsObservable {
|
||||
/**
|
||||
* Add an observer that listens for updates
|
||||
* @param observer
|
||||
*/
|
||||
void addListener(IsObserver observer);
|
||||
/**
|
||||
* Remove an observer from the list
|
||||
* @param observer
|
||||
*/
|
||||
void removeListener(IsObserver observer);
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package ch.zhaw.prog2.application;
|
||||
/**
|
||||
* Most basic interface for beeing an observer
|
||||
* @author bles
|
||||
*
|
||||
*/
|
||||
public interface IsObserver {
|
||||
/**
|
||||
* This method is always called when an observed object
|
||||
* changes
|
||||
*/
|
||||
void update();
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package ch.zhaw.prog2.application;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
/**
|
||||
* A WordModel object holds a map of words (String) with the actual count
|
||||
* @author bles
|
||||
*
|
||||
*/
|
||||
public class WordModel {
|
||||
private Map<String, Integer> words = new HashMap<>();
|
||||
|
||||
public void addWord(String word) {
|
||||
int count = words.getOrDefault(word, 0);
|
||||
words.put(word, ++count);
|
||||
}
|
||||
|
||||
public void removeWord(String word) {
|
||||
int count = words.getOrDefault(word, 1);
|
||||
if (count == 1) {
|
||||
words.remove(word);
|
||||
} else {
|
||||
words.put(word, --count);
|
||||
}
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for(Map.Entry<String, Integer> entry : words.entrySet()) {
|
||||
sb.append(entry.getKey()).append(" - ").append(entry.getValue());
|
||||
sb.append(System.lineSeparator());
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package ch.zhaw.prog2.application;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
/**
|
||||
* Adds observable functionality to one WordModel-object.
|
||||
* The decorator uses the original methods of the WordModel-object.
|
||||
* @author bles
|
||||
*
|
||||
*/
|
||||
public class WordModelDecorator implements IsObservable {
|
||||
private final WordModel wordModel;
|
||||
private List<IsObserver> listener = new ArrayList<>();
|
||||
|
||||
public WordModelDecorator(WordModel wordModel) {
|
||||
this.wordModel = wordModel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addListener(IsObserver observer) {
|
||||
listener.add(observer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeListener(IsObserver observer) {
|
||||
listener.remove(observer);
|
||||
}
|
||||
|
||||
public void addWord(String word) {
|
||||
wordModel.addWord(word);
|
||||
informListener();
|
||||
}
|
||||
|
||||
public void removeWord(String word) {
|
||||
wordModel.removeWord(word);
|
||||
informListener();
|
||||
}
|
||||
|
||||
private void informListener() {
|
||||
for(IsObserver observer : listener) {
|
||||
observer.update();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import javafx.scene.layout.AnchorPane?>
|
||||
|
||||
<AnchorPane xmlns:fx="http://javafx.com/fxml/1">
|
||||
<!-- TODO Add Nodes -->
|
||||
</AnchorPane>
|
||||
|
||||
Reference in New Issue
Block a user