الگوهای طراحی در جاوا – راهنمای ساده شده شماره 3

Summarize this content to 400 words in Persian Lang
به این راهنمای 3 قسمتی خوش آمدید. در این پست یک مقدمه مقدماتی برای طراحی الگوها به همراه مثال ارائه خواهم کرد.
در این پست خاص، الگوهای طراحی چیست، چرا باید در مورد آنها بدانیم، انواع الگوهای طراحی و الگوهای رفتاری را پوشش خواهیم داد.
لینک های سریع:
الگوهای خلاقیت
الگوهای ساختاری
الگوهای رفتاری
الگوهای طراحی چیست؟
الگوهای طراحی راه حل های اثبات شده ای برای مشکلات رایج در توسعه نرم افزار هستند. آنها به توسعه دهندگان کمک می کنند تا وظایف پیچیده را به روشی ساختاریافته حل کنند و به آنها اجازه می دهند راه حل های موفق را مجدداً استفاده کنند و درک و نگهداری کد آنها را آسان تر می کنند. الگوهای طراحی را به عنوان طرحی برای حل مشکلات معمولی که هنگام ساختن نرم افزار رخ می دهند، در نظر بگیرید.
چرا باید درباره آنها بدانیم؟
دانستن در مورد الگوهای طراحی به توسعه دهندگان کمک می کند تا مشکلات رایج را به روشی ساختاریافته و کارآمد حل کنند و کد را قابل استفاده مجدد، نگهداری و مقیاس پذیرتر کند.
به آشپزخانه رستوران فکر کنید. سرآشپز برای تهیه یک غذا از دستور (الگوی طراحی) پیروی می کند. سرآشپز به جای اختراع مجدد فرآیند هر بار، از مراحل اثبات شده برای ارائه مداوم غذای با کیفیت استفاده می کند. به طور مشابه، الگوهای طراحی به توسعه دهندگان کمک می کند تا به طور موثر مشکلات را بدون اختراع مجدد راه حل ها هر بار حل کنند.
انواع الگوهای طراحی:
در جاوا الگوهای طراحی به سه گروه اصلی دسته بندی می شوند:
1. الگوهای خلاقیت: این الگوها به ایجاد اشیا به روشی انعطافپذیر و قابل استفاده مجدد کمک میکنند.2. الگوهای ساختاری: این الگوها بر نحوه چیدمان و اتصال اجسام برای تشکیل سیستم های بزرگتر تمرکز می کنند.3. الگوهای رفتاری: این الگوها با نحوه تعامل و ارتباط اشیاء با یکدیگر سروکار دارند.
الگوهای رفتاری
الگوهای رفتاری به نحوه تعامل و ارتباط اشیاء با یکدیگر مربوط می شود.
زنجیره مسئولیت:
در یک سیستم پردازش سفارش، ممکن است سطوح مختلفی از تایید برای سفارشات داشته باشید (به عنوان مثال، سفارش های کوچک به یک کارمند، سفارش های بزرگ به یک مدیر). الگوی زنجیره مسئولیت به شما امکان می دهد درخواست را در امتداد زنجیره ای از کنترل کننده ها ارسال کنید تا زمانی که یکی آن را رسیدگی کند.
abstract class OrderHandler {
protected OrderHandler nextHandler;
public void setNextHandler(OrderHandler handler) {
this.nextHandler = handler;
}
public abstract void handleOrder(int amount);
}
class ClerkHandler extends OrderHandler {
public void handleOrder(int amount) {
if (amount < 500) {
System.out.println(“Clerk handling order”);
} else if (nextHandler != null) {
nextHandler.handleOrder(amount);
}
}
}
class ManagerHandler extends OrderHandler {
public void handleOrder(int amount) {
if (amount >= 500) {
System.out.println(“Manager handling order”);
} else if (nextHandler != null) {
nextHandler.handleOrder(amount);
}
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
فرمان:
در یک ویرایشگر متن، الگوی فرمان را می توان برای تعریف اقداماتی مانند کپی، چسباندن و واگرد استفاده کرد، به طوری که هر عمل می تواند به عنوان یک شی کپسوله شود.
interface Command {
void execute();
}
class CopyCommand implements Command {
private TextEditor editor;
public CopyCommand(TextEditor editor) {
this.editor = editor;
}
public void execute() {
editor.copyText();
}
}
class TextEditor {
public void copyText() {
System.out.println(“Text copied”);
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
ناظر:
در یک سیستم پایش آب و هوا، چندین دستگاه (مانند برنامه های تلفن همراه، ایستگاه های هواشناسی) باید هر زمان که شرایط آب و هوایی تغییر می کند، به روز شوند.
interface Observer {
void update(String weather);
}
class WeatherStation {
private List observers = new ArrayList<>();
public void addObserver(Observer observer) {
observers.add(observer);
}
public void notifyObservers(String weather) {
for (Observer observer : observers) {
observer.update(weather);
}
}
}
class WeatherApp implements Observer {
public void update(String weather) {
System.out.println(“Weather update: ” + weather);
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
استراتژی:
شما می توانید از استراتژی های مختلفی برای محاسبه هزینه های حمل و نقل استفاده کنید (به عنوان مثال، حمل و نقل معمولی، حمل و نقل سریع). الگوی استراتژی به شما امکان می دهد بین این استراتژی ها به صورت پویا جابجا شوید.
interface ShippingStrategy {
double calculateShippingCost(double weight);
}
class RegularShipping implements ShippingStrategy {
public double calculateShippingCost(double weight) {
return weight * 2;
}
}
class ExpeditedShipping implements ShippingStrategy {
public double calculateShippingCost(double weight) {
return weight * 5;
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
روش قالب:
در یک بازی، شما ممکن است انواع مختلفی از شخصیتها داشته باشید که مجموعهای از مراحل مشابه را برای حمله دنبال میکنند، اما جزئیات خاص متفاوت است. متد الگو به شما امکان می دهد یک الگوریتم کلی تعریف کنید در حالی که به زیر کلاس ها اجازه می دهد مراحل خاصی را لغو کنند.
abstract class GameCharacter {
public void attack() {
moveToTarget();
performAttack();
celebrate();
}
protected void moveToTarget() {
System.out.println(“Moving to target…”);
}
protected abstract void performAttack();
protected void celebrate() {
System.out.println(“Celebrating after attack…”);
}
}
class Warrior extends GameCharacter {
protected void performAttack() {
System.out.println(“Warrior performs sword attack!”);
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
به این راهنمای 3 قسمتی خوش آمدید. در این پست یک مقدمه مقدماتی برای طراحی الگوها به همراه مثال ارائه خواهم کرد.
در این پست خاص، الگوهای طراحی چیست، چرا باید در مورد آنها بدانیم، انواع الگوهای طراحی و الگوهای رفتاری را پوشش خواهیم داد.
لینک های سریع:
- الگوهای خلاقیت
- الگوهای ساختاری
- الگوهای رفتاری
الگوهای طراحی چیست؟
الگوهای طراحی راه حل های اثبات شده ای برای مشکلات رایج در توسعه نرم افزار هستند. آنها به توسعه دهندگان کمک می کنند تا وظایف پیچیده را به روشی ساختاریافته حل کنند و به آنها اجازه می دهند راه حل های موفق را مجدداً استفاده کنند و درک و نگهداری کد آنها را آسان تر می کنند. الگوهای طراحی را به عنوان طرحی برای حل مشکلات معمولی که هنگام ساختن نرم افزار رخ می دهند، در نظر بگیرید.
چرا باید درباره آنها بدانیم؟
دانستن در مورد الگوهای طراحی به توسعه دهندگان کمک می کند تا مشکلات رایج را به روشی ساختاریافته و کارآمد حل کنند و کد را قابل استفاده مجدد، نگهداری و مقیاس پذیرتر کند.
به آشپزخانه رستوران فکر کنید. سرآشپز برای تهیه یک غذا از دستور (الگوی طراحی) پیروی می کند. سرآشپز به جای اختراع مجدد فرآیند هر بار، از مراحل اثبات شده برای ارائه مداوم غذای با کیفیت استفاده می کند. به طور مشابه، الگوهای طراحی به توسعه دهندگان کمک می کند تا به طور موثر مشکلات را بدون اختراع مجدد راه حل ها هر بار حل کنند.
انواع الگوهای طراحی:
در جاوا الگوهای طراحی به سه گروه اصلی دسته بندی می شوند:
1. الگوهای خلاقیت: این الگوها به ایجاد اشیا به روشی انعطافپذیر و قابل استفاده مجدد کمک میکنند.
2. الگوهای ساختاری: این الگوها بر نحوه چیدمان و اتصال اجسام برای تشکیل سیستم های بزرگتر تمرکز می کنند.
3. الگوهای رفتاری: این الگوها با نحوه تعامل و ارتباط اشیاء با یکدیگر سروکار دارند.
الگوهای رفتاری
الگوهای رفتاری به نحوه تعامل و ارتباط اشیاء با یکدیگر مربوط می شود.
زنجیره مسئولیت:
در یک سیستم پردازش سفارش، ممکن است سطوح مختلفی از تایید برای سفارشات داشته باشید (به عنوان مثال، سفارش های کوچک به یک کارمند، سفارش های بزرگ به یک مدیر). الگوی زنجیره مسئولیت به شما امکان می دهد درخواست را در امتداد زنجیره ای از کنترل کننده ها ارسال کنید تا زمانی که یکی آن را رسیدگی کند.
abstract class OrderHandler {
protected OrderHandler nextHandler;
public void setNextHandler(OrderHandler handler) {
this.nextHandler = handler;
}
public abstract void handleOrder(int amount);
}
class ClerkHandler extends OrderHandler {
public void handleOrder(int amount) {
if (amount < 500) {
System.out.println("Clerk handling order");
} else if (nextHandler != null) {
nextHandler.handleOrder(amount);
}
}
}
class ManagerHandler extends OrderHandler {
public void handleOrder(int amount) {
if (amount >= 500) {
System.out.println("Manager handling order");
} else if (nextHandler != null) {
nextHandler.handleOrder(amount);
}
}
}
فرمان:
در یک ویرایشگر متن، الگوی فرمان را می توان برای تعریف اقداماتی مانند کپی، چسباندن و واگرد استفاده کرد، به طوری که هر عمل می تواند به عنوان یک شی کپسوله شود.
interface Command {
void execute();
}
class CopyCommand implements Command {
private TextEditor editor;
public CopyCommand(TextEditor editor) {
this.editor = editor;
}
public void execute() {
editor.copyText();
}
}
class TextEditor {
public void copyText() {
System.out.println("Text copied");
}
}
ناظر:
در یک سیستم پایش آب و هوا، چندین دستگاه (مانند برنامه های تلفن همراه، ایستگاه های هواشناسی) باید هر زمان که شرایط آب و هوایی تغییر می کند، به روز شوند.
interface Observer {
void update(String weather);
}
class WeatherStation {
private List observers = new ArrayList<>();
public void addObserver(Observer observer) {
observers.add(observer);
}
public void notifyObservers(String weather) {
for (Observer observer : observers) {
observer.update(weather);
}
}
}
class WeatherApp implements Observer {
public void update(String weather) {
System.out.println("Weather update: " + weather);
}
}
استراتژی:
شما می توانید از استراتژی های مختلفی برای محاسبه هزینه های حمل و نقل استفاده کنید (به عنوان مثال، حمل و نقل معمولی، حمل و نقل سریع). الگوی استراتژی به شما امکان می دهد بین این استراتژی ها به صورت پویا جابجا شوید.
interface ShippingStrategy {
double calculateShippingCost(double weight);
}
class RegularShipping implements ShippingStrategy {
public double calculateShippingCost(double weight) {
return weight * 2;
}
}
class ExpeditedShipping implements ShippingStrategy {
public double calculateShippingCost(double weight) {
return weight * 5;
}
}
روش قالب:
در یک بازی، شما ممکن است انواع مختلفی از شخصیتها داشته باشید که مجموعهای از مراحل مشابه را برای حمله دنبال میکنند، اما جزئیات خاص متفاوت است. متد الگو به شما امکان می دهد یک الگوریتم کلی تعریف کنید در حالی که به زیر کلاس ها اجازه می دهد مراحل خاصی را لغو کنند.
abstract class GameCharacter {
public void attack() {
moveToTarget();
performAttack();
celebrate();
}
protected void moveToTarget() {
System.out.println("Moving to target...");
}
protected abstract void performAttack();
protected void celebrate() {
System.out.println("Celebrating after attack...");
}
}
class Warrior extends GameCharacter {
protected void performAttack() {
System.out.println("Warrior performs sword attack!");
}
}