بررسی دیزاین پترن ها ( Design Patterns ) در جاوا :
من ارسلان میربزرگی، در این مقاله قصد دارم تا شما را با Design Patterns ها در زبان جاوا آشنا کنم و توضیحاتی را به زبان ساده برای شما مخاطبان عزیز ارائه بدهم. Design Patterns ها یا الگوهای طراحی، در واقع بهترین راه حل هایی برای مشکلاتی هستند که در پروسه طراحی نرم افزارها وجود دارند.

الگوی Factory یک Design Patterns
این الگو یک Design Patterns است. همانطور که از نام این Design Patterns مشخص است، این الگو با ساخت یک کارخانه، این امکان را به ما میدهد که در زمان ساخت یک شی، به جای ساخت شی توسط خودمان، به این کارخانه دستور ساخت چیزی را که مدنظر داریم، بدهیم و پس از آن، شی توسط کارخانه تولید و آماده میشود.
این الگو مزیتهایی نیز مانند سهولت در تولید اشیا مختلف، کاهش خطور کدنویسی شده را داراست. همچنین عدم نیاز به اعمال تغییرات در صورت ایجاد هر گونه تغییر بر روی کلاس ( این تغییرات توسط کارخانه اعمال خواهد شد) را دارد. برای درک روش کار الگوی Factory به عنوان یک Design Patterns ، میتوانید به مثال زیر توجه کنید.
فرض میکنیم یک اینترفیس (وسیله ای برای پخش موسیقی از ضبطی به غیر از ضبط نصب شده بر روی ماشین) در اختیار داریم:
public interface Vehicle { void showVehicleType(); }
2 کلاس دیگر برای ماشین و موتور نیز در اختیار داریم:
public class Car implements Vehicle { @Override public void showVehicleType() { System.out.println("Vehicle: Car"); } } public class MotorCycle implements Vehicle { @Override public void showVehicleType() { System.out.println("Vehicle: MotorCycle"); } }
در برای پیاده سازی الگوی Factory، کلاس دیگری به نام VehicleFactory را نیز میسازیم:
public class VehicleFactory { public Vehicle createVehicle(String vehicleType){ if(vehicleType == null){ return null; } else if(vehicleType.equals("Car")){ return new Car(); } else if(vehicleType.equals("MotorCycle")){ return new MotorCycle(); } return null; }
در این مرحله فقط کافی است تا زمانی که قصد ساخت ماشین یا موتور را داریم، به شکل زیر کدنویسی کنیم:
VehicleFactory vehicleFactory = new VehicleFactory(); Vehicle car = vehicleFactory.createVehicle("Car"); car.showVehicleType(); // خروجی Vehicle: Car Vehicle motorCycle = vehicleFactory.createVehicle("MotorCycle"); motorCycle.showVehicleType(); Vehicle: MotorCycle خروجی //

مشاهده کردید که کار چندان سختی نبود. در این مثال Design Patterns، ما برای تعیین نوع وسیله نقلیه، از رشته استفاده کردیم. مشخص است که اگر از هر رشتهای به غیر از Car یا MotorCycle استفاده کنیم، مقدار null بر خواهد گشت.
واضح است که از روشهای دیگری نیز برای نشان دادن نوع وسیله نقلیه میتوان استفاده کرد. یکی از این رشتهها، رشته استاتیک است که در کد زیر نمونه آن را مشاهده میکنید.
public class VehicleFactory { public static final String TYPE_CAR = "Car" public static final String TYPE_MOTORCYCLE = "MotorCycle" public Vehicle createVehicle(String vehicleType){ if(vehicleType == null){ return null; } else if(vehicleType.equals(TYPE_CAR)){ return new Car(); } else if(vehicleType.equals(TYPE_MOTORCYCLE)){ return new MotorCycle(); } return null; } }
برای تعریف شی نیز میتوانیم به روش زیر عمل کنیم:
Vehicle motorCycle = vehicleFactory.createVehicle(VehicleFactory.TYPE_MOTORCYCLE)
روش دیگری نیز برای استفاده از enum برای تعیین نوع کلاس درخواستی در وجود دارد که در زیر آن را مشاهده میکنید:
public class VehicleFactory { public enum VehicleTypeEnum{ CAR, MOTOR_CYCLE } public Vehicle createVehicle(VehicleTypeEnum vehicleTypeEnum){ if(vehicleTypeEnum== null){ return null; } else if(vehicleTypeEnum.equals(VehicleTypeEnum.CAR)){ return new Car(); } else if(vehicleTypeEnum.equals(VehicleTypeEnum.MOTOR_CYCLE)){ return new MotorCycle(); } return null; } }
و در زمان تولید شی، به صورت زیر عمل میکنیم:
Vehicle car = vehicleFactory.createVehicle(VehicleFactory.VehicleTypeEnum.CAR);
در Design Patterns برای رعایت اصل اصل open/close که از اصول پنجگانه solid است نیز میتوانیم کلاس کارخانه خود را به شکل مقابل، پیاده سازی کنیم:
public class VehicleFactory { public Vehicle createCar(){ return new Car(); } public Vehicle createMotorCycle(){ return new MotorCycle(); } {
با برای ساخت شی نیز میتوانیم به شکل زیر، کدنویسی را انجام دهیم:
Vehicle carObject = vehicleFactory.createCar(); Vehicle motorCycleObject = vehicleFactory.createMotorCycle();
در آخر
در این مقاله با تعریف کلی از که نوعی Design Patterns در زبان جاوا است، آشنا شدید. این الگو مانند هر Design Pattern دیگری، در زمان استفاده میتواند تغییرات دلخواه شما را اعمال نماید. به عنوان مثال میتوان به تعریف تابع یا توابع سازنده اشیا داخل کارخانه به صورت استاتیک اشاره کرد. همچنین با پاس دادن زمان ساخت اشیا به پارامترهای خاص و رفتن به سراغ ارث بریها چند سطحی را بپذیرد.