Общие замечания были "перечислены ранее":http://twowords.ru/development/15/osnovnye-shablony-proektirovaniya, сейчас же хочу проиллюстрировать диаграммой и кодом.
Главное положение, выдвигаемое шаблоном, говорит о том, что обязанность назначается тому классу, который имеет всё необходимое для её выполнения.
Я рассматриваю следующую ситуацию: есть кот, холодильник и сосиски в холодильнике. Кот открывает дверцу и оглядывается. Конечно, в реальности кот бы сам подсчитал количество сосисок, но в мире ПО этим непременно должен заняться сам холодильник. Почему? А всё потому, что он, как хранитель питательного мяса, _знает_ достаточно.
Ниже диаграмма.
!http://twowords.ru/images/3.gif!
На данный момент не располагаю инструментом для построения диаграмм последовательностей (ну нет их в Eclipse в стандартном плагине UML2). Посему пока диаграмма классов.
Код для каждого класса в отдельности.
public void myau(){
System.out.print("myau!");
}
public void lookRound() {
Refrigerator.getInstance().Initialize();
Integer weight = Refrigerator.getInstance().getSausagesWeight();
System.out.println(weight.toString());
}
}
private List
static Refrigerator instance;
public void Initialize() {
sausages = new Vector
sausages.add(new Sausage(50));
sausages.add(new Sausage(100));
}
private Refrigerator() { }
public static synchronized Refrigerator getInstance() {
if (instance == null) {
instance = new Refrigerator();
}
return instance;
}
public Integer getSausagesWeight() {
Integer weight = 0;
for (Sausage s : sausages) {
weight += s.getWeight();
}
return weight;
}
}
private Integer weight;
public Sausage(Integer w) {
weight = w;
}
public Integer getWeight() {
return weight;
}
}
Последовательность такая:
c.myau();
c.lookRound();
Вывод:
bc. myau!150
Комментариев нет:
Отправить комментарий