ݺߣ

ݺߣShare a Scribd company logo
Design Patterns
‫خورد؟‬ ‫می‬ ‫دردی‬ ‫چه‬ ‫به‬ ‫و‬ ‫چیست‬
‫تهرانی‬ ‫مسیح‬ ‫محمود‬ :‫تحریر‬ ‫به‬
. @ .Mahmud tehrani gmail com
:// .http masihtehrani ir
Desgin Pattern‫؟‬ ‫چیست‬
‫توسط‬ ‫قبل‬ ‫که‬ ‫نویسی‬ ‫برنامه‬ ‫دنیای‬ ‫متداول‬ ‫مسایل‬
‫الگوهایی‬ ‫شکل‬ ‫به‬ ‫و‬ ،‫طراحی‬ ‫بهینه‬ ‫بصورت‬ ‫افرادی‬
.‫اند‬ ‫شده‬ ‫بندی‬ ‫دسته‬ ‫استاندارد‬
‫با‬ ‫دیگران‬ ‫که‬ ‫چرخی‬ ‫نیستید‬ ‫مجبور‬ ‫دیگر‬ ‫شما‬ ‫واقع‬ ‫در‬
.‫کنید‬ ‫اختراع‬ ‫دوباره‬ ‫رو‬ ‫کردند‬ ‫اختراع‬ ‫مشقت‬
: ‫دیگر‬ ‫تعبیری‬ ‫به‬
‫که‬ ‫کسی‬OOP‫که‬ ‫ست‬ ‫کسی‬ ‫مثل‬ ‫میدونه‬ ‫خوب‬ ‫رو‬
‫اما‬ ‫میشناسه؛‬ ‫رو‬ ‫کیک‬ ‫یک‬ ‫ی‬ ‫دهنده‬ ‫تشکیل‬ ‫اجزای‬
) ‫طراحی‬ ‫الگوهای‬ ‫که‬ ‫کسی‬Design Patternas‫رو‬ (
‫اختیار‬ ‫در‬ ‫هم‬ ‫رو‬ ‫کیک‬ ‫اون‬ ‫دقیق‬ ‫پخت‬ ‫دستور‬ ‫میدونه‬
.‫داره‬
‫خوشمزه‬ ‫و‬ ‫یکدست‬ ‫همیشه‬ ‫اول‬ ‫نفر‬ ‫کیک‬ : ‫نتیجه‬
‫نویسی‬ ‫برنامه‬ ‫و‬ ‫افزار‬ ‫نرم‬ ‫طراحی‬ ‫در‬
!‫همینطوره‬ ‫هم‬
‫نویسی‬ ‫کد‬ ‫چطور‬ ‫رو‬ ‫مسئله‬ ‫یک‬ ‫گن‬ ‫می‬ ‫شما‬ ‫به‬ ‫ها‬ ‫الگو‬
‫و‬ ‫باشه‬ ‫مهندسی‬ ‫های‬ ‫خاصیت‬ ‫دارای‬ ‫کدتون‬ ‫تا‬ ‫کنید‬
.‫باشه‬ ‫نداشته‬ ‫رو‬ ‫کیفیت‬ ‫بی‬ ‫یا‬ ‫اسپاگتی‬ ‫کد‬ ‫یک‬ ‫مشکلت‬
‫یک‬ ‫تحت‬ "‫روشن‬ ‫مسئله‬ ‫"یک‬ ‫برای‬ ‫کلی‬ ‫طور‬ ‫به‬ ‫ها‬ ‫الگو‬
.‫دهند‬ ‫می‬ ‫ارایه‬ ‫حل‬ ‫راه‬ ‫یک‬ "‫مشخص‬ ‫"شرایط‬
‫شی‬ ‫در‬ ‫توانی‬ ‫می‬ ‫چطور‬ ‫بدانیی‬ ‫خواهی‬ ‫می‬ ‫شما‬ ‫مثل‬
‫محدود‬ ‫و‬ ‫کنترل‬ ‫رو‬ ‫خاص‬ ‫کل س‬ ‫یک‬ ‫از‬ ‫شی‬ ‫ایجاد‬ ‫گرایی‬
‫نام‬ ‫به‬ ‫هست‬ ‫الگویی‬ ‫کار‬ ‫این‬ ‫برای‬ ‫کنی!؟‬Singleton
‫این‬ ‫حل‬ ‫برای‬ ‫روش‬ ‫بهترین‬ ‫که‬ ‫شده‬ ‫اثبات‬ ‫همه‬ ‫به‬ ‫که‬
‫نیست‬ ‫لزم‬ ‫شما‬ ‫دیگه‬ ‫الگو‬ ‫این‬ ‫وجود‬ ‫با‬ .‫است‬ ‫مسئله‬
!!!‫کنی‬ ‫حل‬ ‫خودت‬ ‫روش‬ ‫از‬ ‫رو‬ ‫مسئله‬ ‫خودت‬
GOF
‫بحث‬Design Pattern‫نرم‬ ‫دنیای‬ ‫در‬ ‫بار‬ ‫اولین‬ ‫برای‬
‫توسط‬ ‫افزار‬GoF.‫گرفت‬ ‫صورت‬
‫ی‬ ‫درباره‬GoF:
: ‫شامل‬ ‫نفره‬ ‫چهار‬ ‫گروه‬ ‫یک‬
,Gamma Erich
Richard Helm
Ralph Johnson
John Vlissides
‫به‬ ‫ملقب‬Gang of Four‫یا‬GoF‫در‬ ‫گروه‬ ‫این‬ .‫هستند‬
۲۱‫سال‬ ‫اکتبر‬۱۹۹۴: ‫عنوان‬ ‫تحت‬ ‫را‬ ‫کتابی‬
:Design Patterns Elements of Reusable
-Object Oriented Software
Creational patterns
(‫اشیاء‬ ‫ایجاد‬ ‫های‬‫)روش‬

Abstract factory

Factory method

Builder

Prototype

Singleton
Structural patterns
(‫ها‬‫کل س‬ ‫و‬ ‫اشیاء‬ ‫ترکیب‬ ‫)چگونگی‬

Adapter

Bridge

Composite

Decorator

Facade

Flyweight

Proxy
Behavioral patterns
(‫یکدیگر‬ ‫با‬ ‫اشیاء‬ ‫ارتباط‬ ‫روی‬ ‫)تمرکز‬

Chain of responsibility

Command

Interpreter

Iterator

Mediator

Memento

Observer

State

Strategy

Template method

Visitor
Singleton Pattern

‫این‬pattern‫الگوهای‬ ‫بندی‬ ‫طبقه‬ ‫در‬Creational
‫دارد‬ ‫جای‬

:‫هدف‬
‫ایجاد‬ ‫نمونه‬ ‫یک‬ ‫فقط‬ ‫ما‬ ‫کل س‬ ‫از‬ ‫اینکه‬ ‫از‬ ‫اطمینان‬ ‫برای‬
.‫است‬ ‫شده‬
‫کل س‬ ‫از‬ ‫نمونه‬ ‫ایجاد‬ ‫کردن‬ ‫محدود‬ ‫برای‬
‫راه‬ ‫آسانترین‬
‫کل س‬ ‫داخل‬ ‫استاتیک‬ ‫متغییر‬ ‫یک‬ ‫ایجاد‬
True‫نمونه‬ ‫اولین‬ ‫تولید‬ ‫صورت‬ ‫در‬ ‫متغییر‬ ‫دادن‬ ‫قرار‬
‫صورت‬ ‫این‬ ‫غیر‬ ‫در‬False.‫دهیم‬‫می‬ ‫قرار‬
‫طراحی‬ ‫الگوی‬
‫در‬ ‫سازی‬ ‫پیاده‬PHP
**/
*class Singleton
/*
class Singleton
}
{
‫متغییر‬ ‫تعریف‬
**/
* @var Singleton reference to singleton
instance
/*
$private static instance;
‫متود‬getinstance
**/
*gets the instance via lazy initialization
( )created on frst usage
*
* @return self
/*
public static function getInstance()
}
( === ::$ )if null static instance{
::$ =static instance new static;
{
Private construct
**/
*:is not allowed to call from outside
private!
*
/*
__private function construct()
}
{
Private clone
**/
*prevent the instance from being cloned
*
* @return void
/*
__private function clone()
}
{
Private wakeup
**/
*prevent from being unserialized
*
* @return void
/*
__private function wakeup()
}
{
‫کاربرد‬Singleton

‫به‬ ‫باز‬ ‫کانکشن‬ ‫یک‬ ‫فقط‬ ‫و‬ ‫دیتابیس)فقط‬ ‫تو‬ ‫کانکشن‬
(‫باشیم‬ ‫داشته‬ ‫دیتابیس‬

‫فقط‬ ‫ما‬ ‫ولی‬ ‫شود‬‫می‬ ‫داده‬ ‫بازگشت‬ ‫بارها‬ ‫ل گ‬ ‫ل گ)یک‬
(‫خواهیم‬‫می‬ ‫را‬ ‫آن‬ ‫بار‬ ‫یک‬

‫سیستم‬ ‫فایل‬ ‫به‬ ‫مربوط‬ ‫برنامه)این‬ ‫فایل‬ ‫ل ک‬
(.‫باشد‬‫می‬
‫عملی‬ ‫مثال‬Singletone‫کل س‬
‫دیتابیس‬
class Db{
$_ =private static instance NULL;
$ =private connected FALSE;
$ =private mysql NULL;
$ =private result NULL;
__private function construct();
__public function destruct();
__private function clone();
public static function getInstance();
($ ,public function connect hostname
$ , $ , $ )username password database;
public function disconnect();
‫دیتابیس‬ ‫از‬ ‫استفاده‬ ‫اول‬ ‫مثال‬
' . .include db class php';
//create instane of Db class
$= ::db Db getInstance();
try{
$-> ($ [' '][' '],db connect cnfg db hostname
$ [' '][' ']cnfg db username,
$[' '][' '], $ [' ']cnfg db password cnfg db
[' ']database);
$= ' *query SELECT FROM user';
$-> ($ )db command query;
($ = $ -> ())while row db fetchAssoc{
$ [' ']echo row username.' : '
‫دیتابیس‬ ‫از‬ ‫استفاده‬ ‫دوم‬ ‫مثال‬
$= ::db Db getInstance();
try{
$-> ($ [' '][' '],db connect cnfg db hostname
$ [' '][' ']cnfg db username,
$[' '][' '], $ [' ']cnfg db password cnfg db
[' ']database);
$= 'query INSERT INTO user'
.'(, ,username password email) '
.'VALUE('
. "'1', '123456',user
' 1@ .user gmail com'"
;'('.

More Related Content

Design Patterns چیست و به چه دردی می خورد؟ (persian)

  • 1. Design Patterns ‫خورد؟‬ ‫می‬ ‫دردی‬ ‫چه‬ ‫به‬ ‫و‬ ‫چیست‬ ‫تهرانی‬ ‫مسیح‬ ‫محمود‬ :‫تحریر‬ ‫به‬ . @ .Mahmud tehrani gmail com :// .http masihtehrani ir
  • 2. Desgin Pattern‫؟‬ ‫چیست‬ ‫توسط‬ ‫قبل‬ ‫که‬ ‫نویسی‬ ‫برنامه‬ ‫دنیای‬ ‫متداول‬ ‫مسایل‬ ‫الگوهایی‬ ‫شکل‬ ‫به‬ ‫و‬ ،‫طراحی‬ ‫بهینه‬ ‫بصورت‬ ‫افرادی‬ .‫اند‬ ‫شده‬ ‫بندی‬ ‫دسته‬ ‫استاندارد‬ ‫با‬ ‫دیگران‬ ‫که‬ ‫چرخی‬ ‫نیستید‬ ‫مجبور‬ ‫دیگر‬ ‫شما‬ ‫واقع‬ ‫در‬ .‫کنید‬ ‫اختراع‬ ‫دوباره‬ ‫رو‬ ‫کردند‬ ‫اختراع‬ ‫مشقت‬ : ‫دیگر‬ ‫تعبیری‬ ‫به‬ ‫که‬ ‫کسی‬OOP‫که‬ ‫ست‬ ‫کسی‬ ‫مثل‬ ‫میدونه‬ ‫خوب‬ ‫رو‬ ‫اما‬ ‫میشناسه؛‬ ‫رو‬ ‫کیک‬ ‫یک‬ ‫ی‬ ‫دهنده‬ ‫تشکیل‬ ‫اجزای‬ ) ‫طراحی‬ ‫الگوهای‬ ‫که‬ ‫کسی‬Design Patternas‫رو‬ ( ‫اختیار‬ ‫در‬ ‫هم‬ ‫رو‬ ‫کیک‬ ‫اون‬ ‫دقیق‬ ‫پخت‬ ‫دستور‬ ‫میدونه‬ .‫داره‬ ‫خوشمزه‬ ‫و‬ ‫یکدست‬ ‫همیشه‬ ‫اول‬ ‫نفر‬ ‫کیک‬ : ‫نتیجه‬
  • 3. ‫نویسی‬ ‫برنامه‬ ‫و‬ ‫افزار‬ ‫نرم‬ ‫طراحی‬ ‫در‬ !‫همینطوره‬ ‫هم‬ ‫نویسی‬ ‫کد‬ ‫چطور‬ ‫رو‬ ‫مسئله‬ ‫یک‬ ‫گن‬ ‫می‬ ‫شما‬ ‫به‬ ‫ها‬ ‫الگو‬ ‫و‬ ‫باشه‬ ‫مهندسی‬ ‫های‬ ‫خاصیت‬ ‫دارای‬ ‫کدتون‬ ‫تا‬ ‫کنید‬ .‫باشه‬ ‫نداشته‬ ‫رو‬ ‫کیفیت‬ ‫بی‬ ‫یا‬ ‫اسپاگتی‬ ‫کد‬ ‫یک‬ ‫مشکلت‬ ‫یک‬ ‫تحت‬ "‫روشن‬ ‫مسئله‬ ‫"یک‬ ‫برای‬ ‫کلی‬ ‫طور‬ ‫به‬ ‫ها‬ ‫الگو‬ .‫دهند‬ ‫می‬ ‫ارایه‬ ‫حل‬ ‫راه‬ ‫یک‬ "‫مشخص‬ ‫"شرایط‬ ‫شی‬ ‫در‬ ‫توانی‬ ‫می‬ ‫چطور‬ ‫بدانیی‬ ‫خواهی‬ ‫می‬ ‫شما‬ ‫مثل‬ ‫محدود‬ ‫و‬ ‫کنترل‬ ‫رو‬ ‫خاص‬ ‫کل س‬ ‫یک‬ ‫از‬ ‫شی‬ ‫ایجاد‬ ‫گرایی‬ ‫نام‬ ‫به‬ ‫هست‬ ‫الگویی‬ ‫کار‬ ‫این‬ ‫برای‬ ‫کنی!؟‬Singleton ‫این‬ ‫حل‬ ‫برای‬ ‫روش‬ ‫بهترین‬ ‫که‬ ‫شده‬ ‫اثبات‬ ‫همه‬ ‫به‬ ‫که‬ ‫نیست‬ ‫لزم‬ ‫شما‬ ‫دیگه‬ ‫الگو‬ ‫این‬ ‫وجود‬ ‫با‬ .‫است‬ ‫مسئله‬ !!!‫کنی‬ ‫حل‬ ‫خودت‬ ‫روش‬ ‫از‬ ‫رو‬ ‫مسئله‬ ‫خودت‬
  • 4. GOF ‫بحث‬Design Pattern‫نرم‬ ‫دنیای‬ ‫در‬ ‫بار‬ ‫اولین‬ ‫برای‬ ‫توسط‬ ‫افزار‬GoF.‫گرفت‬ ‫صورت‬ ‫ی‬ ‫درباره‬GoF: : ‫شامل‬ ‫نفره‬ ‫چهار‬ ‫گروه‬ ‫یک‬ ,Gamma Erich Richard Helm Ralph Johnson John Vlissides ‫به‬ ‫ملقب‬Gang of Four‫یا‬GoF‫در‬ ‫گروه‬ ‫این‬ .‫هستند‬ ۲۱‫سال‬ ‫اکتبر‬۱۹۹۴: ‫عنوان‬ ‫تحت‬ ‫را‬ ‫کتابی‬ :Design Patterns Elements of Reusable -Object Oriented Software
  • 5. Creational patterns (‫اشیاء‬ ‫ایجاد‬ ‫های‬‫)روش‬  Abstract factory  Factory method  Builder  Prototype  Singleton
  • 6. Structural patterns (‫ها‬‫کل س‬ ‫و‬ ‫اشیاء‬ ‫ترکیب‬ ‫)چگونگی‬  Adapter  Bridge  Composite  Decorator  Facade  Flyweight  Proxy
  • 7. Behavioral patterns (‫یکدیگر‬ ‫با‬ ‫اشیاء‬ ‫ارتباط‬ ‫روی‬ ‫)تمرکز‬  Chain of responsibility  Command  Interpreter  Iterator  Mediator  Memento  Observer  State  Strategy  Template method  Visitor
  • 8. Singleton Pattern  ‫این‬pattern‫الگوهای‬ ‫بندی‬ ‫طبقه‬ ‫در‬Creational ‫دارد‬ ‫جای‬  :‫هدف‬ ‫ایجاد‬ ‫نمونه‬ ‫یک‬ ‫فقط‬ ‫ما‬ ‫کل س‬ ‫از‬ ‫اینکه‬ ‫از‬ ‫اطمینان‬ ‫برای‬ .‫است‬ ‫شده‬ ‫کل س‬ ‫از‬ ‫نمونه‬ ‫ایجاد‬ ‫کردن‬ ‫محدود‬ ‫برای‬
  • 9. ‫راه‬ ‫آسانترین‬ ‫کل س‬ ‫داخل‬ ‫استاتیک‬ ‫متغییر‬ ‫یک‬ ‫ایجاد‬ True‫نمونه‬ ‫اولین‬ ‫تولید‬ ‫صورت‬ ‫در‬ ‫متغییر‬ ‫دادن‬ ‫قرار‬ ‫صورت‬ ‫این‬ ‫غیر‬ ‫در‬False.‫دهیم‬‫می‬ ‫قرار‬
  • 12. ‫متغییر‬ ‫تعریف‬ **/ * @var Singleton reference to singleton instance /* $private static instance;
  • 13. ‫متود‬getinstance **/ *gets the instance via lazy initialization ( )created on frst usage * * @return self /* public static function getInstance() } ( === ::$ )if null static instance{ ::$ =static instance new static; {
  • 14. Private construct **/ *:is not allowed to call from outside private! * /* __private function construct() } {
  • 15. Private clone **/ *prevent the instance from being cloned * * @return void /* __private function clone() } {
  • 16. Private wakeup **/ *prevent from being unserialized * * @return void /* __private function wakeup() } {
  • 17. ‫کاربرد‬Singleton  ‫به‬ ‫باز‬ ‫کانکشن‬ ‫یک‬ ‫فقط‬ ‫و‬ ‫دیتابیس)فقط‬ ‫تو‬ ‫کانکشن‬ (‫باشیم‬ ‫داشته‬ ‫دیتابیس‬  ‫فقط‬ ‫ما‬ ‫ولی‬ ‫شود‬‫می‬ ‫داده‬ ‫بازگشت‬ ‫بارها‬ ‫ل گ‬ ‫ل گ)یک‬ (‫خواهیم‬‫می‬ ‫را‬ ‫آن‬ ‫بار‬ ‫یک‬  ‫سیستم‬ ‫فایل‬ ‫به‬ ‫مربوط‬ ‫برنامه)این‬ ‫فایل‬ ‫ل ک‬ (.‫باشد‬‫می‬
  • 18. ‫عملی‬ ‫مثال‬Singletone‫کل س‬ ‫دیتابیس‬ class Db{ $_ =private static instance NULL; $ =private connected FALSE; $ =private mysql NULL; $ =private result NULL; __private function construct(); __public function destruct(); __private function clone(); public static function getInstance(); ($ ,public function connect hostname $ , $ , $ )username password database; public function disconnect();
  • 19. ‫دیتابیس‬ ‫از‬ ‫استفاده‬ ‫اول‬ ‫مثال‬ ' . .include db class php'; //create instane of Db class $= ::db Db getInstance(); try{ $-> ($ [' '][' '],db connect cnfg db hostname $ [' '][' ']cnfg db username, $[' '][' '], $ [' ']cnfg db password cnfg db [' ']database); $= ' *query SELECT FROM user'; $-> ($ )db command query; ($ = $ -> ())while row db fetchAssoc{ $ [' ']echo row username.' : '
  • 20. ‫دیتابیس‬ ‫از‬ ‫استفاده‬ ‫دوم‬ ‫مثال‬ $= ::db Db getInstance(); try{ $-> ($ [' '][' '],db connect cnfg db hostname $ [' '][' ']cnfg db username, $[' '][' '], $ [' ']cnfg db password cnfg db [' ']database); $= 'query INSERT INTO user' .'(, ,username password email) ' .'VALUE(' . "'1', '123456',user ' 1@ .user gmail com'" ;'('.