Поиск по сайту:

Шаблон проектирования прокси


Шаблон Proxy Design — это один из шаблонов структурного проектирования и, на мой взгляд, один из самых простых шаблонов для понимания.

Шаблон проектирования прокси

Шаблон проектирования прокси — основной класс

Поскольку мы кодируем Java с точки зрения интерфейсов, вот наш интерфейс и класс его реализации. CommandExecutor.java

package com.journaldev.design.proxy;

public interface CommandExecutor {

	public void runCommand(String cmd) throws Exception;
}

CommandExecutorImpl.java

package com.journaldev.design.proxy;

import java.io.IOException;

public class CommandExecutorImpl implements CommandExecutor {

	@Override
	public void runCommand(String cmd) throws IOException {
                //some heavy implementation
		Runtime.getRuntime().exec(cmd);
		System.out.println("'" + cmd + "' command executed.");
	}

}

Шаблон проектирования прокси — класс прокси

Теперь мы хотим предоставить только пользователям с правами администратора полный доступ к вышеуказанному классу, если пользователь не является администратором, тогда будут разрешены только ограниченные команды. Вот наша очень простая реализация прокси-класса. CommandExecutorProxy.java

package com.journaldev.design.proxy;

public class CommandExecutorProxy implements CommandExecutor {

	private boolean isAdmin;
	private CommandExecutor executor;
	
	public CommandExecutorProxy(String user, String pwd){
		if("Pankaj".equals(user) && "J@urnalD$v".equals(pwd)) isAdmin=true;
		executor = new CommandExecutorImpl();
	}
	
	@Override
	public void runCommand(String cmd) throws Exception {
		if(isAdmin){
			executor.runCommand(cmd);
		}else{
			if(cmd.trim().startsWith("rm")){
				throw new Exception("rm command is not allowed for non-admin users.");
			}else{
				executor.runCommand(cmd);
			}
		}
	}

}

Клиентская программа шаблона проектирования прокси

ProxyPatternTest.java

package com.journaldev.design.test;

import com.journaldev.design.proxy.CommandExecutor;
import com.journaldev.design.proxy.CommandExecutorProxy;

public class ProxyPatternTest {

	public static void main(String[] args){
		CommandExecutor executor = new CommandExecutorProxy("Pankaj", "wrong_pwd");
		try {
			executor.runCommand("ls -ltr");
			executor.runCommand(" rm -rf abc.pdf");
		} catch (Exception e) {
			System.out.println("Exception Message::"+e.getMessage());
		}
		
	}

}

Вывод приведенной выше примерной программы шаблона проектирования прокси:

'ls -ltr' command executed.
Exception Message::rm command is not allowed for non-admin users.

Обычно шаблон проектирования прокси используется для управления доступом или для обеспечения реализации оболочки для повышения производительности. Пакет Java RMI использует шаблон прокси. Это все, что касается шаблона проектирования прокси в java.