Загрузка данных


1.
class Memento {
    private int state;

    public Memento(int state) {
        this.state = state;
    }

    public int getState() {
        return state;
    }
}


class Originator {
    private int state;

    public void setState(int state) {
        this.state = state;
    }

    public Memento createMemento() {
        return new Memento(state);
    }

    public void setMemento(Memento m) {
        state = m.getState();
    }
}


class Caretaker {
    private Memento memento;

    public void save(Memento m) {
        memento = m;
    }

    public Memento load() {
        return memento;
    }
}
---
Originator originator = new Originator();
Caretaker caretaker = new Caretaker();

originator.setState(1);

// сохраняем состояние
caretaker.save(originator.createMemento());

originator.setState(2);

// возвращаем старое состояние
originator.setMemento(caretaker.load());

---
2
interface Subject {
    void request();
}


class RealSubject implements Subject {

    public void request() {
        System.out.println("RealSubject request");
    }
}


class Proxy implements Subject {

    private RealSubject realSubject;

    public Proxy(RealSubject realSubject) {
        this.realSubject = realSubject;
    }

    public void request() {

        // что-то делаем до вызова
        System.out.println("Proxy: before");

        realSubject.request();

        // что-то делаем после вызова
        System.out.println("Proxy: after");
    }
}
---
RealSubject real = new RealSubject();

Subject proxy = new Proxy(real);

proxy.request();
---
3
class Product {
}


interface Builder {
    void buildPartA();
    void buildPartB();
    Product getResult();
}


class ConcreteBuilder implements Builder {

    private Product product = new Product();

    public void buildPartA() {
        System.out.println("Build part A");
    }

    public void buildPartB() {
        System.out.println("Build part B");
    }

    public Product getResult() {
        return product;
    }
}


class Director {

    private Builder builder;

    public Director(Builder builder) {
        this.builder = builder;
    }

    public void construct() {
        builder.buildPartA();
        builder.buildPartB();
    }
}
---
Builder builder = new ConcreteBuilder();

Director director = new Director(builder);

director.construct();

Product product = builder.getResult();