Рубрики
Без рубрики

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

Шаблон прокси – дизайна является одним из шаблонов структурного проектирования. Пример Шаблона Прокси-сервера. Шаблон проектирования прокси-сервера в примере Java. Пример Кода Шаблона Прокси-сервера.

Автор оригинала: Pankaj Kumar.

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

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

Замысел шаблона прокси-дизайна в соответствии с Богом таков:

Предоставьте суррогат или заполнитель для другого объекта, чтобы контролировать доступ к нему.

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

Допустим, у нас есть класс, который может выполнять некоторые команды в системе. Теперь, если мы его используем, это нормально, но если мы хотим передать эту программу клиентскому приложению, у нее могут возникнуть серьезные проблемы, потому что клиентская программа может выдать команду на удаление некоторых системных файлов или изменение некоторых настроек, которые вам не нужны.

Здесь может быть создан прокси-класс для обеспечения контролируемого доступа к программе.

Шаблон Проектирования Прокси – Основной Класс

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

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

package com.journaldev.design.proxy;

public interface CommandExecutor {

	public void runCommand(String cmd) throws Exception;
}

Поскольку мы кодируем 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.");
	}

}

Шаблон Проектирования Прокси – Прокси-Класс

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

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

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);
			}
		}
	}

}

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

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

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.