Delegate class in java

Delegate class in java

Specifies a portable API for ORB-vendor-specific implementation of the org.omg.CORBA.Object methods. Each stub (proxy) contains a delegate object, to which all org.omg.CORBA.Object methods are forwarded. This allows a stub generated by one vendor’s ORB to work with the delegate from another vendor’s ORB.

Constructor Summary

Method Summary

All Methods Instance Methods Abstract Methods Concrete Methods
Modifier and Type Method and Description
abstract Request create_request (Object obj, Context ctx, String operation, NVList arg_list, NamedValue result)

Provides the implementation to override the equals(java.lang.Object obj) method of the delegating CORBA object.

releaseReply may optionally be called by a stub to release a reply stream back to the ORB when the unmarshaling has completed.

servant_postinvoke() is invoked by the local stub after the operation has been invoked on the local servant.

Methods inherited from class java.lang.Object

Constructor Detail

Delegate

Method Detail

get_interface_def

public abstract Object get_interface_def(Object self)

duplicate

release

is_a

non_existent

is_equivalent

hash

request

public abstract Request request(Object obj, String operation)

create_request

public abstract Request create_request(Object obj, Context ctx, String operation, NVList arg_list, NamedValue result)

create_request

public abstract Request create_request(Object obj, Context ctx, String operation, NVList arg_list, NamedValue result, ExceptionList exclist, ContextList ctxlist)

orb

get_policy

public Policy get_policy(Object self, int policy_type)

get_domain_managers

public DomainManager[] get_domain_managers(Object self)

Retrieves the DomainManagers of this object. This allows administration services (and applications) to retrieve the domain managers, and hence the security and other policies applicable to individual objects that are members of the domain.

set_policy_override

public Object set_policy_override(Object self, Policy[] policies, SetOverrideType set_add)

Associates the policies passed in with a newly created object reference that it returns. Only certain policies that pertain to the invocation of an operation at the client end can be overridden using this operation. Attempts to override any other policy will result in the raising of the CORBA::NO_PERMISSION exception.

is_local

servant_preinvoke

public ServantObject servant_preinvoke(Object self, String operation, Class expectedType)

Returns a Java reference to the servant which should be used for this request. servant_preinvoke() is invoked by a local stub. If a ServantObject object is returned, then its servant field has been set to an object of the expected type (Note: the object may or may not be the actual servant instance). The local stub may cast the servant field to the expected type, and then invoke the operation directly. The ServantRequest object is valid for only one invocation, and cannot be used for more than one invocation.

servant_postinvoke

public void servant_postinvoke(Object self, ServantObject servant)

servant_postinvoke() is invoked by the local stub after the operation has been invoked on the local servant. This method must be called if servant_preinvoke() returned a non-null value, even if an exception was thrown by the servant’s method. For this reason, the call to servant_postinvoke() should be placed in a Java finally clause.

request

public OutputStream request(Object self, String operation, boolean responseExpected)

request is called by a stub to obtain an OutputStream for marshaling arguments. The stub must supply the operation name, and indicate if a response is expected (i.e is this a oneway call).

invoke

public InputStream invoke(Object self, OutputStream output) throws ApplicationException, RemarshalException

invoke is called by a stub to invoke an operation. The stub provides an OutputStream that was previously returned by a request() call. invoke returns an InputStream which contains the marshaled reply. If an exception occurs, invoke may throw an ApplicationException object which contains an InputStream from which the user exception state may be unmarshaled.

releaseReply

releaseReply may optionally be called by a stub to release a reply stream back to the ORB when the unmarshaling has completed. The stub passes the InputStream returned by invoke() or ApplicationException.getInputStream(). A null value may also be passed to releaseReply, in which case the method is a noop.

toString

hashCode

equals

Provides the implementation to override the equals(java.lang.Object obj) method of the delegating CORBA object.

Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2023, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.

Источник

Java Blog

Паттерн делегирования (Delegation) является поведенческим (behavioral) паттерном проектрования.

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

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

Используйте шаблон делегата для достижения следующего:

  • Уменьшение связанности методов с их классом
  • Работы компонентов, которые ведут себя одинаково, но предполагается, что эта ситуация может измениться в будущем.

Пример использования паттерна делегирования на Java

Предположим у нас есть автомобиль — интерфейс Car, имеющий метод ride:

package example; public interface Car

Класс CarController реализует интерфейс Car, но сам действие не выполняет, а делегирует это вспомогательному классу, экземпляр которого хранит в своем поле car:

package example; public class CarController implements Car < private final Car car; public CarController(Car car) < this.car = car; >@Override public void ride(String name) < car.ride(name); >; >

Есть вспомогательные классы которые непосредственно выполняют действие — BMWCar, MercedesCar, VolvoCar — они также реализуют интерфейс Car, но в самом приложении вызываются опосредованно через экземпляр класса CarController, который делегирует им выполнение работы:

package example.cars; import example.Car; public class BMWCar implements Car < @Override public void ride(String name) < System.out.println(name + " rides in BMW"); >; >
package example.cars; import example.Car; public class MercedesCar implements Car < @Override public void ride(String name) < System.out.println(name + " rides in Mercedes"); >; >
package example.cars; import example.Car; public class VolvoCar implements Car < @Override public void ride(String name) < System.out.println(name + " rides in Volvo"); >; >

В самом приложении экземпляры вспомогательных классов передаются в CarController и вызов на выполнение действия осуществляется на экземпляре класса CarController:

package example; import example.cars.*; public class App < private static final String RIDER = "Tom"; public static void main(String[] args) < CarController bmw = new CarController(new BMWCar()); CarController mercedes = new CarController(new MercedesCar()); CarController volvo = new CarController(new VolvoCar()); bmw.ride(RIDER); mercedes.ride(RIDER); volvo.ride(RIDER); >>

  • Получить ссылку
  • Facebook
  • Twitter
  • Pinterest
  • Электронная почта
  • Другие приложения

Комментарии

Отправить комментарий

Популярные сообщения из этого блога

Методы класса Object в Java

Изображение

Класс Object является корнем иерархии классов. У каждого класса есть Object как суперкласс. Все объекты, включая массивы, реализуют методы этого класса. Методы класса Object Метод getClass() public final Class getClass() Возвращает класс времени исполнения (runtime class) этого Object. Возвращенный объект Class — это объект, который заблокирован статическими синхронизированными методами представленного класса. Фактический тип результата — Class где |X| заменяется статическим типом выражения, для которого вызывается getClass. Например, в этом фрагменте кода не требуется приведение: Number n = 0; Class c = n.getClass(); Метод getClass() возвращает: Объект Class, представляющий класс времени исполнения (runtime class) этого объекта. Метод hashCode public int hashCode() Возвращает значение хэш-кода для объекта. Этот метод поддерживается для использования хэш-таблиц, таких как те, что предоставляются HashMap. Основной контракт метода hashCo

Как получить текущий timestamp в Java

Изображение

Чтобы получить текущий timestamp в Java : package main; import java.sql.Timestamp; public class Main < public static void main(String[] args)< Timestamp timestamp = new Timestamp(System.currentTimeMillis()); System.out.println(timestamp); >> Вывод: 2019-10-03 10:09:21.61 Вот еще два более подробных примера как получить текущий timestamp в Java: 1. java.sql.Timestamp Есть два метода получить текущий java.sql.Timestamp package main; import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.util.Date; public class Main < private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss"); public static void main(String[] args) < // Метод 1 Timestamp timestamp = new Timestamp(System.currentTimeMillis()); System.out.println(timestamp); // Метод 2 - через Date Date date = new Date(); System.out.println(new Timestamp(date.getTime()

Spring Boot стартеры

Изображение

Стартеры — это набор удобных дескрипторов зависимостей, которые вы можете включить в свое приложение. Вы получаете универсальный набор для всех необходимых вам Spring и связанных с ними технологий без необходимости искать примеры кода и копировать и вставлять множество дескрипторов зависимостей. Например, если вы хотите начать использовать Spring и JPA для доступа к базе данных, включите в ваш проект зависимость spring-boot-starter-data-jpa. Стартеры содержат множество зависимостей, которые необходимы вам для быстрого запуска и запуска проекта с согласованным, поддерживаемым набором управляемых переходных зависимостей. Что указывается в имени стартера Все официальные стартеры следуют аналогичной схеме именования; spring-boot-starter-*, где * это конкретный тип приложения. Эта структура наименования предназначена, чтобы помочь, когда вам нужно найти стартер. Интеграция Maven во многие IDE позволяет вам искать зависимости по имени. Например, если установлен соответствующий плагин Ecl

Источник

Pro Java

Еще один вид отношений, не поддерживаемый в Java напрямую, называется делегированием (delegation). Он занимает промежуточное положение между наследованием и композицией: экземпляр существующего класса включается в создаваемый класс (как при композиции), но в то же время все или некоторые методы встроенного объекта становятся доступными в новом классе (как при наследовании) . Очень часто такие виды отношений используются при построении графического интерфейса, например для реализации модели MVC библиотека Swing использует делегирование.

А сейчас рассмотрим на простом примере что же это за зверь такой – делегирование.

Например, класс SpaceShipControls имитирует модуль управления космическим кораблем. А Для построения космического корабля можно воспользоваться наследованием в классе SpaceShip.

SS001

SS002

Однако космический корабль не может рассматриваться как частный случай своего управляющего модуля — несмотря на то, что ему, к примеру, можно приказать двигаться вперед (forward()). Точнее сказать, что SpaceShip содержит SpaceShipControls, и в то же время все методы последнего предоставляются классом SpaceShip. Проблема решается при помощи делегирования:

SS003

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

Источник

Читайте также:  Pinging the Server
Оцените статью