Service delegate in java

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

Источник

Java Guides

The Business Delegate pattern adds an abstraction layer between presentation and business tiers. By using the pattern we gain loose coupling between the tiers and encapsulate knowledge about how to locate, connect to, and interact with the business objects that make up the application.

Let’s discuss how Business Delegate Pattern decouples presentation tier and business tier with a class diagram and source code.

This pattern is divided into a number of sections for simplicity like problem, forces, solution etc.

Table of contents
Problem
Forces
Solution
Structure — Class Diagram, Sequence Diagram
Participants and Responsibilities
Implementation
Consequences
Applicability
References

Problem

You want to hide clients from the complexity of remote communication with business service components.

Forces

(This section describes Lists the reasons and motivations that affect the problem and the solution. The list of forces highlights the reasons why one might choose to use the pattern and provides a justification for using the pattern)

  • You want to access the business-tier components from your presentation-tier components and clients, such as devices, web services, and rich clients.
  • You want to minimize coupling between clients and the business services, thus hiding the underlying implementation details of the service, such as lookup and access.
  • You want to avoid unnecessary invocation of remote services.
  • You want to translate network exceptions into application or user exceptions.
  • You want to hide the details of service creation, reconfiguration, and invocation retries from the clients.

Solution

(Here solution section describes the solution approach briefly and the solution elements in detail)

Use a Business Delegate to encapsulate access to a business service. The Business Delegate hides the implementation details of the business service, such as lookup and access mechanisms.

Structure

Let’s use UML class diagram to show the basic structure of the solution and the UML Sequence diagram in this section present the dynamic mechanisms of the solution.

Class Diagram

Sequence Diagram

Participants and Responsibilities

BusinessDelegate — The BusinessDelegate’s role is to provide control and protection for the business service.

ServiceLocator — The ServiceLocator encapsulates the implementation details of locating a BusinessService component.

BusinessService — The BusinessService is a business-tier component, such as an enterprise bean, that is being accessed by the client.

Implementation

public interface BusinessService < void doProcessing(); >
public class EJBService implements BusinessService < @Override public void doProcessing() < System.out.println("EJBService is now processing"); > >
//This is Service JMS implementation. public class JMSService implements BusinessService < @Override public void doProcessing() < System.out.println("JMSService is now processing"); > >
//Service Email implementation. public class EmailService implements BusinessService  @Override public void doProcessing()  System.out.println("EmailService is now processing"); > >

This class acts as ServiceLocator encapsulates the implementation details of locating BusinessService components.

public class BusinessLookup < private EjbService ejbService; private JmsService jmsService; private EmailService emailService; /** * @param serviceType * Type of service instance to be returned. * @return Service instance. */ public BusinessService getBusinessService(ServiceType serviceType) < if (serviceType.equals(ServiceType.EJB)) < return ejbService; > else if (serviceType.equals(ServiceType.JMS)) < return jmsService; > else < return emailService; > > public void setJmsService(JmsService jmsService) < this.jmsService = jmsService; > public void setEjbService(EjbService ejbService) < this.ejbService = ejbService; > public void setEmailService(EmailService emailService) < this.emailService = emailService; > >
public class BusinessDelegate < private BusinessLookup lookupService; private BusinessService businessService; private ServiceType serviceType; public void setLookupService(BusinessLookup businessLookup) < this.lookupService = businessLookup; > public void setServiceType(ServiceType serviceType) < this.serviceType = serviceType; > public void doTask() < businessService = lookupService.getBusinessService(serviceType); businessService.doProcessing(); > > Enumeration of service types public enum ServiceType < EJB, JMS,EMAIL; >

Step 5: Create Client. The client utilizes BusinessDelegate to call the business tier.

public class Client < private BusinessDelegate businessDelegate; public Client(BusinessDelegate businessDelegate) < this.businessDelegate = businessDelegate; > public void doTask() < businessDelegate.doTask(); > >

Step 6 : Use BusinessDelegate and Client classes to demonstrate Business Delegate pattern.

In this example, the client utilizes a business delegate to execute a task. The Business Delegate then selects the appropriate service and makes the service call.

public class App < /** * Program entry point. * * @param args command line args */ public static void main(String[] args) < BusinessDelegate businessDelegate = new BusinessDelegate(); BusinessLookup businessLookup = new BusinessLookup(); businessLookup.setEjbService(new EjbService()); businessLookup.setJmsService(new JmsService()); businessLookup.setEmailService(new EmailService()); businessDelegate.setLookupService(businessLookup); businessDelegate.setServiceType(ServiceType.EJB); Client client = new Client(businessDelegate); client.doTask(); businessDelegate.setServiceType(ServiceType.JMS); client.doTask(); businessDelegate.setServiceType(ServiceType.EMAIL); client.doTask(); > >

Applicability

  • you want loose coupling between presentation and business tiers
  • you want to orchestrate calls to multiple business services
  • you want to encapsulate service lookups and service calls

References

Источник

Читайте также:  504 Gateway Time-out
Оцените статью