.


:




:

































 

 

 

 


10 4




State () ;

Strategy () ;

Template Method ( ) , , ;

Visitor () , .

Command

-, , . .

- , , .

. 5.11. Command

/* # 27: : Command.java: AddCommand.java: MultCommand.java */

package chapt05.command;

public abstract class Command {

public abstract void execute();

}

package chapt05.command;

import chapt05.receiver.*;

public class MultCommand extends Command {

private ArrayOperation ao;

 

public MultCommand (ArrayOperation ao) {

this. ao = ao;

}

public void execute () {

this. ao.product();

}

}

package chapt05.command;

import chapt05.receiver.*;

public class AddCommand extends Command {

private ArrayOperation ao;

 

public AddCommand (ArrayOperation ao) {

this. ao = ao;

}

public void execute() {

this. ao.sum();

}

}

/* # 28: Receiver () - : ArrayOperation.java */

package chapt05.receiver;

public class ArrayOperation {

private int [] mass;

 

public ArrayOperation(int [] mass) {

this. mass = mass;

}

public void sum() {

int sum = 0;

for (int i: mass)

sum += i;

System. out. println(sum);

}

public void product() {

int mult = 1;

for (int i: mass)

mult *= i;

System. out. println(mult);

}

}

/* # 29: Invoker ()- : ManagerCommands.java */

package chapt05.invoker;

import chapt05.command.*;

public class ManagerCommands {

private Command command;

 

public ManagerCommands(Command command) {

this. command = command;

}

public void setManager(Command command) {

this. command = command;

}

public void exec() {

command.execute();

}

}

/* # 30: Command: Main.java */

package chapt05;

import chapt05.invoker.*;

import chapt05.receiver.*;

import chapt05.command.*;

public class Main {

public static void main(String[] args) {

int mass[] = {-1, 71, 45, -20, 48, 60, 19};

/* (Receiver)-

*/

ArrayOperation receiver = new ArrayOperation (mass);

//

Command operation1 = new MultCommand(receiver);

Command operation2 = new AddCommand(receiver);

// (Invoker)-

ManagerCommands manager = new ManagerCommands(operation1);

manager.exec();

manager.setManager(operation2);

manager.exec();

}

}

- . . ManagerCommands . -.

Strategy

, . , .

. 5.12. Strategy

Operation , Sorting , SortByMax SortByMin. Sorting SortByXxx, Operation , Operation , .

. . - .

/* # 31: :

Operation.java: SortByMax.java: SortByMin.java */

package chapt05.strategy;

public abstract class Operation {

public abstract void sort(int mass[]);

}

package chapt05.strategy;

public class SortByMax extends Operation {

public void sort(int mass[]) {

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

if (mass[j] > mass[i]){

int m = mass[i];

mass[i] = mass[j];

mass[j] = m;

}

}

}

System. out. print("SortByMax: ");

for (int i: mass)

System. out. print(i + " ");

System. out. println('\n'); }

}

package chapt05.strategy;

public class SortByMin extends Operation {

public void sort(int mass[]) {

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

if (mass[j] < mass[i]){

int m = mass[i];

mass[i] = mass[j];

mass[j] = m;

}

}

}

System. out. print("SortByMin: ");

for (int i: mass)

System. out. print(i + " ");

System. out. println('\n');}

}

/* # 32: : Sorting.java */

package chapt05.strategy;

public class Sorting {

private Operation operation = null;

public Sorting(int operation){

switch (operation) {

case 1: this. operation = new SortByMax();

break;

case 2: this. operation = new SortByMin();

break;

default: System. out. println(

" "); }

}

public void sorting(int [] mass) {

if (operation!= null) operation.sort(mass);

else return;

}

}

/* # 33: Strategy: Main.java */

package chapt05.strategy;

public class Main {

public static void main(String args[]) {

int mass[] = {28, 9, 71, 8, 35, 5, 51};

Sorting cont1 = new Sorting(1);

Sorting cont2 = new Sorting(2);

cont1.sorting(mass);

cont2.sorting(mass);

}

}

Observer

, . Java Listener.

. 5.13. Observer

Rectangle () . OperationObserver () , . Perimeter ( ) Rectangle, , OperationObserver .

. , Observer . , , -.

/* # 34: -, -:

Rectangle.java */

package chapt05.observer;

import java.util.*;

public class Rectangle {

private float width;

private float height;

private ArrayList<OperationObserver> observerList =

new ArrayList<OperationObserver>();

public Rectangle(float width, float height) {

this. width = width;

this. height = height;

}

public void addObserver(OperationObserver observer) {

observerList.add(observer);

}

public float getWidth() {

return width;

}

public float getHeight() {

return height;

}

public void setWidth(float width) {

this. width = width;

notifyObservers();

}

public void setHeight(float height) {

this. height = height;

notifyObservers();

}

private void notifyObservers() {

Iterator it = observerList.iterator();

while (it.hasNext()) {

((OperationObserver) it.next()).valueChanged(this);

}

}

public String toString() {

String s = "";

Iterator it = observerList.iterator();

while (it.hasNext()) {

s = s +

((OperationObserver) it.next()).toString() + '\n';

}

return s;

}

}

Perimeter Square
OperationObserver .
Rectangle , .

/* # 35: -: OperationObserver.java: Square.java:

Perimeter.java */

package chapt05.observer;

public abstract class OperationObserver {

public abstract float valueChanged(Rectangle observed);

}

package chapt05.observer;

public class Perimeter extends OperationObserver {

private float perimeter;

public float valueChanged(Rectangle observed) {

return perimeter =

2 * (observed.getWidth() + observed.getHeight());

}

public String toString() {

return "P = " + perimeter;

}

}

package chapt05.observer;

public class Square extends OperationObserver {

private float square;

public float valueChanged(Rectangle observed) {

return square =

observed.getWidth() * observed.getHeight();

}

public String toString() {

return "S = " + square;

}

}

/* # 36: Observer: Main.java */

package chapt05.observer;

public class Main {

public static void main(String args[]) {

Rectangle observed = new Rectangle(5, 3);

System. out. println(observed.toString());

observed.addObserver(new Square());

observed.addObserver(new Perimeter());

observed.setWidth(10);

System. out. println(observed.toString());

observed.setHeight(8);

System. out. println(observed.toString());

}

}





:


: 2016-04-03; !; : 470 |


:

:

, .
==> ...

773 - | 750 -


© 2015-2024 lektsii.org - -

: 0.065 .