آشنایی با Event Programming در جاوا
Event Programming و یا برنامه نویسی بر اساس Event, یکی از روش هایی است که میتواند کدنویسی برنامه نویسان را تسهیل کند. در این مقاله قصد داریم تا با این مفهوم آشنا شویم و چگونگی استفاده از آن را بررسی کنیم.
Event Programming
Event Programming, به الگویی از برنامه نویسی اطلاق میشود که روند اجرای برنامه بر اساس Event ها انجام میشود. این Event ها میتوانند کلیک بر روی یک Button, فشردن یک کلید بر روی صفحه کلید و یا یک پیام از سوی بخشی از برنامه باشد. یک برنامه Event-Driven برنامه ای است که یک Event را به محض وقوع دریافت کند و بر اساس متد های نوشته شده برای کنترل Event با آن تعامل میکند.
Event Bus
این مبحث بسیار مشابه با مبحث Bus در معماری کامپیوتر است. وقتی یک رویداد رخ میدهد, بر روی یک Bus فرضی قرار میگیرد و متدی که برای Handle کردن Event ایجاد شده است, آن را دریافت میکند.
در این مقاله با استفاده از Guava, مبحث Event Programming را در جاوا پیاده سازی میکنیم.
Guava
Guava, یک Library است که توسط Google ایجاد شده است و شامل کلاس هایی برای پردازش هایی مانند Hashing, Reflection و … است. در این مقاله نیز قصد داریم تا از کلاس Event Bus موجود در این Library استفاده کنیم. برای اضافه کردن Guava به پروژه میتوانیم از Maven استفاده کنیم:
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>23.3-jre</version> </dependency>
در ابتدا نیاز داریم تا برای هر Event یک کلاس مدل تعریف کنیم. این کلاس میتواند متغیر هایی را در خود نگه دارد. همچنین کلاس میتواند بدون متغیر باشد و تنها وقوع یک Event را مشخص کند:
public class EventModel { private String message; }
اکنون باید در یک کلاس Event را Handle کنیم:
public class EventHandler { EventBus eventBus = new EventBus(); public EventBus getEventBus() { return eventBus; } public EventHandler() { eventBus.register(this); } }
در constructor, متد Register در Event Bus را فراخوانی میکنیم و کلاس Handler را به آن ارجاع میدهیم. با این کار مشخص میکنیم که این کلاس, وظیفه مدیریت Event هایی که توسط کلاس Event Bus ایجاد میشود را برعهده دارد.
اکنون این قطعه کد را به کلاس Handler اضافه میکنیم:
private List<EventModel> eventModels = new ArrayList<EventModel>(); public void add(EventModel eventModel) { eventModels.add(eventModel); }
در یک کلاس دیگر به لیست موجود در این کلاس, عضو اضافه میکنیم:
public static void main(String[] args) { EventHandler eventHandler = new EventHandler(); EventModel usR = new EventModel("vahid"); eventHandler.add(usR); }
اکنون میخواهیم پس از فراخوانی متد add یک Event نیز ایجاد شود:
public static void main(String[] args) { EventHandler eventHandler = new EventHandler(); EventModel usR = new EventModel("Zero to Hero"); eventHandler.add(usR); eventHandler.getEventBus().post(usR); }
با استفاده از این کد, مدل Event را درون Bus فرضی ارسال میکنیم. اکنون برای دریافت این Event در کلاس EventHandler چنین عمل میکنیم:
public class EventHandler { EventBus eventBus = new EventBus(); public EventBus getEventBus() { return eventBus; } public EventHandler() { eventBus.register(this); } private List<EventModel> eventModels = new ArrayList<EventModel>(); public void add(EventModel eventModel) { eventModels.add(eventModel); } @Subscribe public void getAddedItem(EventModel eventModel) { System.out.println(eventModel.getMessage()); } }
در کد فوق, با استفاده از Subscribe@ مشخص میکنیم که این متد, برای Handle کردن یک Event است. این متد تنها میتواند یک پارامتر ورودی داشته باشد. در واقع این پارامتر مشخص میکند که این متد برای مدیریت کدام Event است. همانطور که در کد بالا مشخص است, این متد برای مدیریت EventModel است و نام متد اهمیتی ندارد. توجه داشته باشید که این متد تنها میتواند یک پارامتر داشته باشد در غیر این صورت با خطای زیر مواجه میشوید:
@Subscribe annotation but has 2 parameters.Subscriber methods must have exactly 1 parameter.
اکنون اگر یک Event Model دیگر ایجاد کنیم و آن را با استفاده از متد post ارسال کنیم, هیچ مقداری را در خروجی چاپ نمیکند.
در این مقاله سعی بر این شد تا با مفهوم Event Programming آشنا شویم و پیاده سازی آن در جاوا را مورد بررسی قرار دهیم.
با ما همراه باشید.
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.