2.構造型モード(3)エージェントモード


詳細
2.構造型モード(3)エージェントモード

    (Proxy Pattern) ,            。           ,           。

  :
1.     。
2.     。
3.    。

  :
1.                     ,                         。
2.              ,             。

1.エージェントモード

package com.andrew.pattern0203.proxy.model01;
public interface Image {
    void display();
}

package com.andrew.pattern0203.proxy.model01;
public class RealImage implements Image {
    private String fileName;
    public RealImage(String fileName) {
        this.fileName = fileName;
        loadFromDisk(fileName);
    }
    @Override
    public void display() {
        System.out.println("Displaying:" + fileName);
    }
    private void loadFromDisk(String fileName) {
        System.out.println("Loading:" + fileName);
    }
}

package com.andrew.pattern0203.proxy.model01;
public class ProxyImage implements Image {
    private RealImage realImage;
    private String fileName;
    public ProxyImage(String fileName) {
        this.fileName = fileName;
    }
    @Override
    public void display() {
        if (null == realImage) {
            realImage = new RealImage(fileName);
        }
        realImage.display();
    }
}

package com.andrew.pattern0203.proxy.model01;
/**
 * 1.     
 * 
 * @author andrew
 * @date 2018/07/01
 */
public class Client {
    public static void main(String[] args) {
        Image image = new ProxyImage("test_img.jpg");
        image.display();
        System.out.println("");
        image.display();
    }
}
    :
Loading:test_img.jpg
Displaying:test_img.jpg

Displaying:test_img.jpg

2.Javaにおけるエージェントモード

public abstract class Subject{
    public abstract void request();
}

public class RealSubject extends Subject{
    public void request(){
        System.out.println("From real subject.");
    }
}

public class ProxySubject extends Subject{
    private RealSubject realSubject; //             
    public void request(){
        this.preRequest(); //               
        if(null == realSubject){
            realSubject = new RealSubject();
        }
        realSubject.request(); //          
        this.postRequest(); //               
    }
    private void preRequest(){
        System.out.println("pre request");
    }
    private void postRequest(){
        System.out.println("post request");
    }
}

public class Client{
    public static void main(String[] args){
        Subject subject = new ProxySubject();
        subject.request();
    }
}
    :
pre request
From real subject.
post request