Шаблоны проектирования (Design patterns). Определение GoF. Классификация порождающие паттерны, страница 2

}

}

/*

Задача:

Найти разность между двумя длинами, причем первая не больше второй.

Модель вида:

- массив входных строк;

- строка-результат.

Функции контроллера:

- проверка входных строк,

- корректировка при возможности (например, оба дабла положительных,     но первый больше второго),

- вызов логики,

- подготовка вида.

Модель данных: объект, содержащий два положительных дабла d1 и d2, d1 <= d2.

Логика:

- main workflow: расчет разности длин;

- alternative: сообщение о формате исходных данных.

*/

// CalcModel.java

public class CalcModel {

private double d1= 1.0, d2= 1.0;

public CalcModel() {

}

public CalcModel(double d1, double d2) {

this.d1= d1;

this.d2= d2;

}

public double calc() {

return d2-d1;

}

}

// Controller.java

public class Controller {

public Controller() {

}

//transforming data to standard form if possible

public void start(View v) {

try {

double h1 = Double.valueOf(v.getArgs()[0]).doubleValue();

double h2 = Double.valueOf(v.getArgs()[1]).doubleValue();

if(h1<=0 || h2<=0)

v.setRes("Wrong args!!!\nNeeded 2 positive double numbers.");

else {     //possible!

if(h1>h2) {

double h=h1; h1=h2; h2=h;    //correction

}

CalcModel cm = new CalcModel(h1,h2);

v.setRes("Answer: " + cm.calc());

}

} catch(Exception e) {

v.setRes("Wrong args!!!\nNeeded 2 positive double numbers.");

}

}

}

// View.java

import java.io.*;

public class View {

private String args[];

private String res;

public View() {

}

public View(String ... arg) {

this.args=arg;

}

public View(InputStreamReader is) {

BufferedReader bistream = new BufferedReader(is);

try {

args= new String[2];

System.out.print("Input 1st double & press <Enter>: ");

args[0] = bistream.readLine();

System.out.print("Input 2nd double & press <Enter>: ");

args[1] = bistream.readLine();

} catch (IOException e) {

System.out.println("Input error: " + e);

}

}

public View(File f) throws IOException{

this(new InputStreamReader(new FileInputStream(f)));

}

public String[] getArgs() {

return args;

}

public String getRes() {

return res;

}

public void setRes(String res) {

this.res=res;

}

public void view() {

for(int i=0; i<args.length; i++){

System.out.println("arg["+ i+ "]: "+ args[i]);

}

System.out.println(res);

}

}

// View2File.java

import java.io.*;

public class View2File extends View {

String fName;

public View2File() {

super();

}

public View2File(String fName, String ... arg) {

super(arg);

this.fName=fName;

}

public View2File(String fName, InputStreamReader is) {

super(is);

this.fName=fName;

}

public View2File(String fName, File f) throws IOException{

super(f);

this.fName=fName;

}

public void view() {

try {

PrintStream ps = new PrintStream(new FileOutputStream (fName));

for(int i=0; i<super.getArgs().length; i++){

ps.println("arg["+ i+ "]: "+ super.getArgs()[i]);

}

ps.println(super.getRes());

} catch (IOException e) {

System.out.println("Output error: " + e);

}

}

}

// Runners.java

import java.io.*;

class Runners1 {

public static void main(String[] args) {

//part View

View v = new View(args);

//part MVC

Controller c = new Controller();

c.start(v);

v.view();

}

}

class Runners2 {

public static void main(String[] args) {

//part View

View v = new View("11", "10");

//part MVC

Controller c = new Controller();

c.start(v);

v.view();

}

}

class Runners3 {

public static void main(String[] args) {

//part View

View v = new View(new InputStreamReader(System.in));

//part MVC

Controller c = new Controller();

c.start(v);

v.view();

}

}

class Runners4 {

public static void main(String[] args) {

try {

//part View

View v = new View(new InputStreamReader(new FileInputStream

(new File("in.txt"))));

//part MVC

Controller c = new Controller();

c.start(v);

v.view();

} catch (IOException e) {

System.out.println("Input error: " + e);

}

}

}

class Runners5 {

public static void main(String[] args) {

//part View

View2File v = new View2File("out.txt", "0", "10");

//part MVC

Controller c = new Controller();

c.start(v);

v.view();

}

}

// SimpleMVC.java

public class SimpleMVC {

private View v;

public SimpleMVC() {

}

public SimpleMVC(View v) {

this.v=v;

}

public void start() {

Controller c = new Controller();

c.start(v);

v.view();

}

}

// SimpleMVCRunners.java

class Runners1SimpleMVC {

public static void main(String[] args) {

new SimpleMVC(new View(args)).start();

}

}

class Runners2SimpleMVC {

public static void main(String[] args) {

new SimpleMVC(new View("11", "10")).start();

}

}

class Runners5SimpleMVC {

public static void main(String[] args) {

new SimpleMVC(new View2File("out.txt", "30", "10")).start();

}

}