{
Enumeration enumeration=observers_vector.elements(); while(enumeration.hasMoreElements()) {
((Observer)enumeration.nextElement()).update(); } } }
public class ConcreteSubject extends Subject {
private String state;
public void change(String newState) {
this.state=newState; this.notify_all(); } }
public class ConcreteObserver implements Observer {
public void update() {
System.out.println(\ } }
public class Client {
public static void main(String args[]) {
ConcreteSubject subject=new ConcreteSubject(); Observer observer=new ConcreteObserver(); subject.add_ob(observer);
subject.change(\} }
13,Visitor模式理解
---------------------------------------------------------------------------- public interface Visitor {
void visit(Node1 node);
void visit(Node2 node);
27
设计模式
}
---------------------------------------------------------------------------- public class Visitor1 implements Visitor {
public void visit(Node1 node1) {
node1.operation1(); }
public void visit(Node2 node2) {
node2.operation2(); } }
---------------------------------------------------------------------------- public class Visitor2 implements Visitor {
public void visit(Node1 node1) {
node1.operation1(); }
public void visit(Node2 node2) {
node2.operation2(); } }
----------------------------------------------------------------------------
public interface Node {
public void accept(Visitor visitor); }
---------------------------------------------------------------------------- public class Node1 impelments Node {
public void accept(Visitor visitor) {
visitor.visit(this); }
public void operation1() {
System.out.println(\
28
设计模式
} }
---------------------------------------------------------------------------- public class Node2 impelments Node {
public void accept(Visitor visitor) {
visitor.visit(this); }
public void operation2() {
System.out.println(\ } }
---------------------------------------------------------------------------- import java.util.*;
public class Structure {
private Vector node_list= new Vector();;
/**
* @link aggregation */
private Node node;
public Structure() { }
public void action(Visitor visitor) {
for(Enumeration e = node_list=.elements(); e.hasMoreElements();) {
node = (Node)e.nextElement(); node.accept(visitor); } }
public void add(Node node) {
29
设计模式
node_list.addElement(node); } }
---------------------------------------------------------------------------- public class Client {
private static Structure structure; private static Visitor visitor;
public static void main(String[] args) {
structure = new Structure();
structure.add(new Node1()); structure.add(new Node1());
visitor = new Visitor1(); structure.action(visitor);
} } 练习
1,用composite模式写一个二叉树的例子
package binarytree;
public abstract class Component { private String name;
public abstract Component addChild(Component leftChild,Component rightChild); //public abstract Component addLeftChild(Component leftChild); public String getName(){return name;} public void getTreeInfo(){}
public abstract int getLength(); }
/***********************************************/
package binarytree;
public class Tree extends Component { private String name;
30
设计模式
private Component leftChild; private Component rightChild;
public Tree(String name,Component leftChild,Component rightChild) { this.name=name;
this.leftChild=leftChild; this.rightChild=rightChild; }
public Tree(String name) { this.name=name; this.leftChild=null; this.rightChild=null; }
public Component addChild(Component leftChild,Component rightChild){ this.leftChild=leftChild; this.rightChild=rightChild; return this; }
public String getName(){ return name; }
public void getTreeInfo() {
System.out.println(\ if(this.leftChild instanceof Leaf) {
System.out.println(getName()+\\a Leaf\ }
if(this.leftChild instanceof Tree){
System.out.println(getName()+\\a Tree\
this.leftChild.getTreeInfo(); }
if(this.leftChild==null) {
System.out.println(getName()+\ }
if(this.rightChild instanceof Leaf) {
System.out.println(getName()+\is a Leaf\ }
if(this.rightChild instanceof Tree) {
System.out.println(getName()+\
31