PDA

View Full Version : آشنایی با الگوهای طراحی - Design Pattern



sinpin
دوشنبه 05 فروردین 1387, 21:05 عصر
سلام :)
در این تاپیک میخواهیم در مورد الگوهای طراحی بیشتر بدانیم.
و از همه ی دوستان علاقمند و یا آشنا با این مفاهیم تقاضا میشه در بحث این تاپیک شرکت سازنده داشته باشند.

هدف تاپیک : امید و انتظار میره به کمک همه ی دوستان عزیز، حداقل 23 الگوی کلاسیک مطرح شده (توسط GoF) در این تاپیک حل و فصل شوند.

این الگوها بصورت خلاصه در تاپیک نکات، ایده ها و ترفندهای کوچک برنامه نویسی در #C (http://barnamenevis.org/forum/showthread.php?t=95001) نیز مطرح شده و خواهند شد، اما بدلیل نوع آن تاپیک و محدودیتهای ذاتی، امکان بحث و گفتگوهای مفصل در آنجا مقدور نبود.


موفق باشید.

sinpin
دوشنبه 05 فروردین 1387, 21:07 عصر
تاریخچه Design Patterns
ایده ی ایجاد الگوهای طراحی بهیچوجه یک ایده ی نو بشمار نمیرود :

The idea of design patterns is not new. Ever since there were engineers, design patterns have existed. The architects of the great pyramids must have used design patterns to envision and eventually build one of the most durable testimonies to quality engineering.
So what are design patterns? Simply put, design patterns name and describe effective solutions for common design problems. The name of a pattern gives us a common term that may be used when discussing design solutions. The description provides a guideline or template that can be applied to a frequently occurring design problem.
Desgin Pattern چیست ؟
مسایل متداول دنیای برنامه نویسی که قبلا توسط افرادی بصورت بهینه طراحی، و به شکل الگوهایی استاندارد دسته بندی شده اند.
در واقع شما دیگر مجبور نیستید چرخی که دیگران با مشقت اختراع کردند رو دوباره اختراع کنید.

به تعبیری دیگر :
کسی که OOP رو خوب میدونه مثل کسی ست که اجزای تشکیل دهنده ی یک کیک رو میشناسه؛ اما کسی که الگوهای طراحی (Design Patternas) رو میدونه دستور پخت دقیق اون کیک رو هم در اختیار داره.
نتیجه : کیک نفر اول همیشه یکدست و خوشمزه نمیشه؛ در حالیکه کیکی که نفر دوم میپزه همیشه خوشمزه و یکدست خواهد بود.


Design patterns are recurring solutions to software design problems you find again and again in real-world application development. Patterns are about design and interaction of objects, as well as providing a communication platform concerning elegant, reusable solutions to commonly encountered programming challenges. The Gang of Four (GoF) patterns are generally considered the foundation for all other patterns. They are categorized in three groups: Creational, Structural, and Behavioral.بحث Design Pattern برای اولین بار در دنیای نرم افزار توسط GoF صورت گرفت.

درباره ی GoF :
http://www.research.ibm.com/designpatterns/pubs/ddj-eip-award_files/9803af1.gif
یک گروه چهار نفره شامل :

Gamma, Erich (http://en.wikipedia.org/wiki/Erich_Gamma)
Richard Helm (http://en.wikipedia.org/wiki/Richard_Helm)
Ralph Johnson (http://en.wikipedia.org/wiki/Ralph_Johnson)
John Vlissides (http://en.wikipedia.org/wiki/John_Vlissides)ملقب به Gang of Four یا GoF هستند. این گروه در 21 اکتبر سال 1994 کتابی را تحت عنوان :
Design Patterns: Elements of Reusable Object-Oriented Software (http://en.wikipedia.org/wiki/Image:Book_designpatterns.gif)
منتشر کردند. (این کتاب تا تاریخ آوریل 2007، سی و 6 بار تجدید چاپ شده است)
آنها در این کتاب 23 الگوی طراحی کلاسیک رو با زبانهای OO مطرح در آنزمان (++C (http://en.wikipedia.org/wiki/C%2B%2B) و Smalltalk (http://en.wikipedia.org/wiki/Smalltalk)) برای اولین بار مورد بحث قرار دادند.

دسته بندی کلاسیک الگوها :
این 23 الگو طبق دسته بندی فرض شده توسط آنها (که هنوز هم رعایت میشود) در 3 گروه زیر جای گرفتند :
http://www.barnamenevis.org/forum/images/icons/icon1.gif Creational patterns (http://en.wikipedia.org/wiki/Creational_pattern)


Abstract factory (http://en.wikipedia.org/wiki/Abstract_factory_pattern)
Factory method (http://en.wikipedia.org/wiki/Factory_method_pattern)
Builder (http://en.wikipedia.org/wiki/Builder_pattern)
Prototype (http://en.wikipedia.org/wiki/Prototype_pattern)
Singleton (http://en.wikipedia.org/wiki/Singleton_pattern)http://www.barnamenevis.org/forum/images/icons/icon1.gif Structural patterns (http://en.wikipedia.org/wiki/Structural_pattern)

Adapter (http://en.wikipedia.org/wiki/Adapter_pattern)
Bridge (http://en.wikipedia.org/wiki/Bridge_pattern)
Composite (http://en.wikipedia.org/wiki/Composite_pattern)
Decorator (http://en.wikipedia.org/wiki/Decorator_pattern)
Facade (http://en.wikipedia.org/wiki/Facade_pattern)
Flyweight (http://en.wikipedia.org/wiki/Flyweight_pattern)
Proxy (http://en.wikipedia.org/wiki/Proxy_pattern)http://www.barnamenevis.org/forum/images/icons/icon1.gif Behavioral patterns (http://en.wikipedia.org/wiki/Behavioral_pattern)

Chain of responsibility (http://en.wikipedia.org/wiki/Chain_of_responsibility_pattern)
Command (http://en.wikipedia.org/wiki/Command_pattern)
Interpreter (http://en.wikipedia.org/wiki/Interpreter_pattern)
Iterator (http://en.wikipedia.org/wiki/Iterator_pattern)
Mediator (http://en.wikipedia.org/wiki/Mediator_pattern)
Memento (http://en.wikipedia.org/wiki/Memento_pattern)
Observer (http://en.wikipedia.org/wiki/Observer_pattern)
State (http://en.wikipedia.org/wiki/State_pattern)
Strategy (http://en.wikipedia.org/wiki/Strategy_pattern)
Template method (http://en.wikipedia.org/wiki/Template_method_pattern)
Visitor (http://en.wikipedia.org/wiki/Visitor_pattern)

sinpin
دوشنبه 05 فروردین 1387, 21:08 عصر
Singleton Pattern
http://www.dofactory.com/Patterns/Diagrams/singleton.gif

این pattern در طبقه بندی الگوهای Creational جای دارد و هدف آن اینستکه :
میخواهیم تضمین کنیم که از یک کلاس تنها بتوان یک آبجکت (حالت ساده و متعارف سینگلتون) ایجاد کرد و همه ی درخواستها نیز تنها به همان یک آبجکت هدایت شوند و نیز بتوان یک دسترسی عمومی به آن داشت.

اولین قدم : سازنده ی کلاس را private میکنیم
چرا private ؟ - پاسخ : تا هیچکسی نتواند از کلاس آبجکت بسازد.

دومین قدم : یک فیلد استاتیک از نوع خود کلاس تعریف میکنیم.
چرا استاتیک : چون قرار است در یک متود استاتیک از آن استفاده کنیم.
چرا private : چون قرار است امکان دسترسی به این آبجکت از طریق یک متود یا پراپرتی صورت گیرد و دسترسی مستقیم مطلوب نیست.

سومین قدم : ایجاد یک پراپرتی یا متود public و استاتیک که فیلد را برمیگرداند.
چرا public ؟ چون میخواهیم از همه جا قابل دسترسی باشد.
چرا استاتیک ؟ چون آبجکتی از کلاس ندارم و ناچارا باید دسترسی به این متود یا پراپرتی در سطح کلاس باشد.

پس تا اینجا داریم :

public sealed class Singleton
{
// Private Constructor
Singleton() { }

// Private object instantiated with private constructor
static readonly Singleton instance = new Singleton();

// Public static property to get the object
public static Singleton UniqueInstance
{
get { return instance; }
}
}معمولا بهتر است این پیاده سازی بصورت lazy instantiation باشد (یعنی تا قبل از اولین invoking آبجکت مقداردهی اولیه نشود) :

public class Singleton
{
// Private constructor
Singleton() { }

// Nested class for lazy instantiation
class SingletonCreator
{
static SingletonCreator() { }
// Private object instantiated with private constructor
internal static readonly
Singleton uniqueInstance = new Singleton();
}

// Public static property to get the object
public static Singleton UniqueInstance
{
get { return SingletonCreator.uniqueInstance; }
}
}این الگو به شدت در طراحیهای مختلف و الگوهای دیگر (مانند : Abstract Factory, Façade , ...) مورد استفاده دارد.

کدها بنقل از کتاب : http://www.oreilly.com/catalog/9780596527730 (http://www.oreilly.com/catalog/9780596527730/)

سایر منابع :
http://en.wikipedia.org/wiki/Singleton_pattern
http://www.dofactory.com/Patterns/PatternSingleton.aspx

sinpin
دوشنبه 05 فروردین 1387, 22:11 عصر
Decorator Pattern


http://www.dofactory.com/Patterns/Diagrams/decorator.gif



این pattern در طبقه بندی الگوهای Structural جای دارد و هدف از آن :
امکان افزودن قابلیتها ( = تزئینات) جدید به یک آبجکت بصورت داینامیک و در زمان اجرا است.
این امکان بوسیله ی افزودن یک کلاس جدید (decorator) ممکن میشود که کلاس اصلی را wrap میکند. این wrapping معمولا با پاس دادن آبجکت اصلی بعنوان یک پارامتر به constructor decorator انجام میشود.

Decorator قابلیتهای جدید را در آبجکت پیاده سازی میکند و باید همان اینترفیسی را که کلاس اصلی پیاده سازی میکند، پیاده سازی کند.
در زمان اجرا میتوان به یک آبجکت هم decorator افزود و هم کاست بدون آنکه مصرف کننده متوجه تغییرات گردد.

Decorating در واقع بعنوان روش جایگزین subclassing (با انعطاف بیشتر) جهت توسعه قابلیتهاست با این تفاوت که :
Subclassing رفتارهای جدیدی را در زمان کامپایل(compile-time) اضافه میکند در حالیکه decorating میتونه رفتارهای جدیدی را در زمان اجرا(runtime) اضافه نماید.
با decorating میتوانیم یک قابلیت را تنها به یک آبجکت خاص از یک کلاس بدهیم بدون آنکه سایر آبجکتهای آن کلاس تغییر کنند.گاه در خیلی از مسایل بظاهر مشکل که صدها کلاس مشتق شده با روابطی پیچیده دارند؛ با پیاده سازی این الگو به یک طراحی آسان و خوانا خواهیم رسید.


یک مثال :
http://www.codeproject.com/KB/architecture/PatternsIntro_Decorator.aspx

منابع :
http://www.dofactory.com/Patterns/PatternDecorator.aspx
http://www.informit.com/articles/article.aspx?p=31350
http://en.wikipedia.org/wiki/Decorator_pattern

sinpin
سه شنبه 06 فروردین 1387, 14:01 عصر
لینک زیر یک مثال واقعی و بسیار مفید از این الگو است (فصل سوم کتاب head first که بصورت رایگان عرضه میشود)
پیشنهاد میکنم حتما دانلود و مشاهده کنید :
http://www.oreilly.com/catalog/hfdesignpat/chapter/ch03.pdf

sinpin
یک شنبه 11 فروردین 1387, 09:22 صبح
Command Pattern
http://www.dofactory.com/Patterns/Diagrams/command.gif


یکی از الگوهای دسته ی behavorial است که به کمک آن (هدف) :
میتوان یک عملیات را در قالب یک آبجکت Encapsulate کرد؛ لذا از آن میتوان در اموری مانند :
پارامتری کردن کلاینتها با درخواستهای متفاوت،
ثبت و log کردن درخواستها،
عملیات برگشت پذیر (Undoable)
و ... استفاده کرد.

Command (Command)

declares an interface for executing an operation

ConcreteCommand (CalculatorCommand)

defines a binding between a Receiver object and an action
implements Execute by invoking the corresponding operation(s) on Receiver

Client (CommandApp)

creates a ConcreteCommand object and sets its receiver

Invoker (User)

asks the command to carry out the request

Receiver (Calculator)

knows how to perform the operations associated with carrying out the request.


یکی از کاربردهای دنیای واقعی برای این الگو گزینه های Undo و Redo موجود در تمامی محیطهای ویرایشگر میباشد.
از دیگر مثالهای واقعی این الگو میتوان به مورد ذخیره ی ماکروها (یکسری عملیات متوالی) در مجموعه ی آفیس اشاره کرد (همانطور که میدانید کاربر میتواند یکسری از کارهای پشت سر هم و تکراری خود را در قالب یک ماکرو ذخیره نماید و سپس با اجرای ماکرو تمامی آن کارها پشت سر هم اجرا خواهند شد)

یک مثال از سایت DoFactory را در زیر مشاهده میکنید (http://www.dofactory.com/Patterns/PatternCommand.aspx)
در این مثال ما یک ماشین حساب با تعداد نامتناهی عملیات Undo و Redo خواهیم داشت :

using System;
using System.Collections;

namespace DoFactory.GangOfFour.Command.RealWorld
{

// MainApp test application

class MainApp
{
static void Main()
{
// Create user and let her compute
User user = new User();

user.Compute('+', 100);
user.Compute('-', 50);
user.Compute('*', 10);
user.Compute('/', 2);

// Undo 4 commands
user.Undo(4);

// Redo 3 commands
user.Redo(3);

// Wait for user
Console.Read();
}
}

// "Command"

abstract class Command
{
public abstract void Execute();
public abstract void UnExecute();
}

// "ConcreteCommand"

class CalculatorCommand : Command
{
char @operator;
int operand;
Calculator calculator;

// Constructor
public CalculatorCommand(Calculator calculator,
char @operator, int operand)
{
this.calculator = calculator;
this.@operator = @operator;
this.operand = operand;
}

public char Operator
{
set{ @operator = value; }
}

public int Operand
{
set{ operand = value; }
}

public override void Execute()
{
calculator.Operation(@operator, operand);
}

public override void UnExecute()
{
calculator.Operation(Undo(@operator), operand);
}

// Private helper function
private char Undo(char @operator)
{
char undo;
switch(@operator)
{
case '+': undo = '-'; break;
case '-': undo = '+'; break;
case '*': undo = '/'; break;
case '/': undo = '*'; break;
default : undo = ' '; break;
}
return undo;
}
}

// "Receiver"

class Calculator
{
private int curr = 0;

public void Operation(char @operator, int operand)
{
switch(@operator)
{
case '+': curr += operand; break;
case '-': curr -= operand; break;
case '*': curr *= operand; break;
case '/': curr /= operand; break;
}
Console.WriteLine(
"Current value = {0,3} (following {1} {2})",
curr, @operator, operand);
}
}

// "Invoker"

class User
{
// Initializers
private Calculator calculator = new Calculator();
private ArrayList commands = new ArrayList();

private int current = 0;

public void Redo(int levels)
{
Console.WriteLine("\n---- Redo {0} levels ", levels);
// Perform redo operations
for (int i = 0; i < levels; i++)
{
if (current < commands.Count - 1)
{
Command command = commands[current++] as Command;
command.Execute();
}
}
}

public void Undo(int levels)
{
Console.WriteLine("\n---- Undo {0} levels ", levels);
// Perform undo operations
for (int i = 0; i < levels; i++)
{
if (current > 0)
{
Command command = commands[--current] as Command;
command.UnExecute();
}
}
}

public void Compute(char @operator, int operand)
{
// Create command operation and execute it
Command command = new CalculatorCommand(
calculator, @operator, operand);
command.Execute();

// Add command to undo list
commands.Add(command);
current++;
}
}
}


خروجی برنامه :



Current value = 100 (following + 100)
Current value = 50 (following - 50)
Current value = 500 (following * 10)
Current value = 250 (following / 2)

---- Undo 4 levels
Current value = 500 (following * 2)
Current value = 50 (following / 10)
Current value = 100 (following + 50)
Current value = 0 (following - 100)

---- Redo 3 levels
Current value = 100 (following + 100)
Current value = 50 (following - 50)
Current value = 500 (following * 10)



این الگو سر فرصت کاملتر خواهد شد...

منابع :‌
http://en.wikipedia.org/wiki/Command_pattern
http://www.dofactory.com/Patterns/PatternCommand.aspx
http://www.vico.org/pages/PatronsDisseny/Pattern%20Command/
http://www.codeproject.com/KB/books/DesignPatterns.aspx

sinpin
یک شنبه 11 فروردین 1387, 14:27 عصر
Observer Pattern

http://www.dofactory.com/Patterns/Diagrams/observer.gif

یکی دیگر از الگوهای رفتاری ست که هدف از آن :
یک رابطه ی یک به چند بین آبجکتهاست که زمانی که آن یک آبجکت تغییر کرد سایر آبجکتهای مرتبط با آن بلافاصله متوجه شده و خود را بروز کنند.


البته در دات نت این الگو بصورت درونکار و به کمک event و delegate قابل پیاده سازی است.

دوستان بحث مفصل در مورد این دو الگوی اخیر را بعدا خواهیم داشت. از اونجا که دیشب به دلایلی نتونستم بخوابم الان زیاد نمیتونم برای نوشتن توضیحات متمرکز بشم.
فعلا وقت بخیر...

منابع :‌
http://en.wikipedia.org/wiki/Observer_pattern
http://www.dofactory.com/Patterns/PatternObserver.aspx
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpatterns/html/ImpObserverInNET.asp
http://www.codeproject.com/kb/architecture/ObserverBySunilKumarKS.aspx

razavi_university
چهارشنبه 14 فروردین 1387, 15:58 عصر
Prototype Pattern

http://upload.wikimedia.org/wikipedia/en/thumb/a/a5/Prototype_Pattern_ZP.svg/825px-Prototype_Pattern_ZP.svg.png

یکی از الگوهای Creational است که هدف از آن :
مشابه‌سازی کلاسی موجود به جای ایجاد وهله‌ای از آن (هنگامی که ایجاد نمونه‌ای دیگر بر روی کارایی برنامه تاثیر منفی داشته باشد) .

به عنوان مثال در موارد زیر کاربرد دارد:

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

برای پیاده‌سازی این الگو :
یک کلاس پایه abstract ایجاد می‌کنیم که متد ()clone را تعریف می‌کند. هر کلاسی که از کلاسه پایه مشتق شود متد ()clone را پیاده‌سازی می‌کند.
هر زمان که نیاز به کپی از این کلاس بود به جای نوشتن new متد ()Clone فراخوانده می‌شود.

مثال :


public enum RecordType
{
Car,
Person
}

/// <summary>
/// Record is the Prototype
/// </summary>
public abstract class Record
{
public abstract Record Clone();
}

/// <summary>
/// PersonRecord is the Concrete Prototype
/// </summary>
public class PersonRecord : Record
{
string name;
int age;

public override Record Clone()
{
return (Record)this.MemberwiseClone(); // default shallow copy
}
}

/// <summary>
/// CarRecord is another Concrete Prototype
/// </summary>
public class CarRecord : Record
{
string carname;
Guid id;

public override Record Clone()
{
CarRecord clone = (CarRecord)this.MemberwiseClone(); // default shallow copy
clone.id = Guid.NewGuid(); // always generate new id
return clone;
}
}

/// <summary>
/// RecordFactory is the client
/// </summary>
public class RecordFactory
{
private static Dictionary<RecordType, Record> _prototypes =
new Dictionary<RecordType, Record>();

/// <summary>
/// Constructor
/// </summary>
public RecordFactory()
{
_prototypes.Add(RecordType.Car, new CarRecord());
_prototypes.Add(RecordType.Person, new PersonRecord());
}

/// <summary>
/// The Factory method
/// </summary>
public Record CreateRecord(RecordType type)
{
return _prototypes[type].Clone();
}
}


منابع :
http://en.wikipedia.org/wiki/Prototype_pattern
کتاب الگوهای طراحی آقای نصیری (http://www.naghoos-andisheh.com/chosedet.asp?bNumber=1026&choseType=b)
http://www.dofactory.com/Patterns/PatternPrototype.aspx

نمونه کدی از CodeProject برای نمایش اتباطات صوتی از طریق شبکه با Prototype (http://www.codeproject.com/KB/IP/voicetalk.aspx)

razavi_university
سه شنبه 03 اردیبهشت 1387, 17:13 عصر
چند روز پیش که گذرم به سایت Oreilly افتاد پوستری جالب از Design Patternهای مختلف دیدم. طراحی جالبی داره و باعث یادآوری میشه:چشمک:

http://www.oreilly.com/catalog/covers/0596102143_cat.gif

Head First Design Patterns Poster (http://www.oreilly.com/catalog/hfdesignpatpstr/index.html)

رضا عربلو
سه شنبه 03 اردیبهشت 1387, 18:18 عصر
این تصویری که در لینک بالا و همچنین در http://www.oreilly.com/catalog/hfdesignpatpstr/cover.html گذاشته اید آنقدر بزرگ و واضح نیست که بشه بهش گفت پوستر، تا اون را چاپ کرده و بر روی دیوار اتاق کارمان نصب کنیم.

razavi_university
سه شنبه 03 اردیبهشت 1387, 19:50 عصر
دوست عزیز اگه خوب به اون لینکی که گذاشتم دقت می کردید می‌دید که این پوستر رایگان نیست به خاطر همین هم یک شکل کوچک ازش قرار دادن
شما هم اگه پوستر بزرگ قابل چاپ می‌خوایید خوب، جستجو کنین ;)
به علت قوانین سایت نمی‌تونم لینک دانلود بدم

چون این بحث خارج از موضوع این تاپیک می‌باشد ؛ این پست بعدا با یک الگوی طراحی جایگزین می‌شود

Parham.D
جمعه 21 تیر 1387, 09:47 صبح
براي Design Pattern، PDF وجود نداره تا به شه مثل يك جزو داشته باشيم. آخه من تازه كار هستم. اين مطالب خوب واسه من يه كم سنگينه و درست نمي‏فهمم.

razavi_university
جمعه 21 تیر 1387, 18:26 عصر
تنها منبع فارسی که من دیده ام کتاب جناب وحید نصیری بود

http://www.adinebook.com/images-1/images/products/9643772462.240.jpg?1189718889 (http://www.adinebook.com/gp/product/9643772462/ref=sr_2_1000_2/443-6902617-1659533)

nalix85
چهارشنبه 10 تیر 1388, 13:05 عصر
جمع بندي حرفهاي فوق و برخي اطلاعات از منابع ديگر را مي توانيد در اين فايل بخوانيد.

esmaeily-hosein
چهارشنبه 10 تیر 1388, 17:31 عصر
اینم PDf خوبیه .
[/URL][URL]http://www.4shared.com/file/115307118/504d0239/Design_Pattern_in_CSharp.html (file:///D:/Resources/Books/Design%20Pattern/Design%20Pattern%20in%20CSharp.rar)

هر کی مایله 10 صفحه به 10 صفحه ترجمه بشه . تا یک مرجع خوب فارسی برای این موضوع باشه .

Coward
پنج شنبه 02 مهر 1388, 15:27 عصر
دوستان اگر کسی میتونه pattern Composite را توضیح بده
ممنون

dr_jacky_2005
چهارشنبه 10 آذر 1389, 21:22 عصر
سلام
میشه Bridge Pattern هم توضیح بدین؟

omid195
دوشنبه 02 آبان 1390, 16:26 عصر
سلام كسي در مورد repository pattern مطلبي داره ممنون ميشم ...

Amir Oveisi
دوشنبه 02 آبان 1390, 19:32 عصر
دوستان اگر کسی میتونه pattern Composite را توضیح بده
ممنون

http://www.oodesign.com/composite-pattern.html

Amir Oveisi
دوشنبه 02 آبان 1390, 19:33 عصر
سلام
میشه Bridge Pattern هم توضیح بدین؟

http://www.oodesign.com/bridge-pattern.html

Amir Oveisi
دوشنبه 02 آبان 1390, 19:36 عصر
سلام كسي در مورد repository pattern مطلبي داره ممنون ميشم ...
http://giorgiosironi.blogspot.com/2009/10/repository-pattern.html

saghar14sahba
چهارشنبه 24 خرداد 1391, 01:44 صبح
salam az matlabe mofidetoon bi nahaiat sepas gozaram
man alan b moshkeli jedi barkhord kardam k az shoma mikham komakam konin va anham farghe beine factory method ba abstract factory ast?
age emkan dare dar ghalebe yek mesal bande ra rahnamaee konin
khaili fori
ba tashakor

مهدی هادیان2
پنج شنبه 10 مرداد 1392, 23:33 عصر
بسم الله الرحمن الرحیم
با سلام
در حال حاضر الگوهای طراحی بسیارند؛ طبیعی ست که هر کدامشون مورد استفاده خاصی دارد. ولی با تمام این تفاسیر ماحصل این ها کدام ها هستند که در پروژه های واقعی ازشون استفاده کنیم.
با سپاس فراوان

rahimlotfi
چهارشنبه 05 آذر 1393, 00:00 صبح
سلام
تقدیم به همه دوستان و عزیزان
الگوهای طراحی


1
مقدمه بر الگو های طراحی (Design Pattern )
رحیم لطفی
دانلود (http://s5.picofile.com/file/8170852318/Class1_Start.rar.html)


2
مقدمه بر الگو های طراحی (Design Pattern )
رحیم لطفی
دانلود (http://s4.picofile.com/file/8170852792/Class2_Interface.rar.html)


3
مقدمه بر الگو های طراحی (Design Pattern )
رحیم لطفی
دانلود (http://s5.picofile.com/file/8170853818/Class3_Interface2.rar.html)


4
مقدمه بر الگو های طراحی (Design Pattern )
رحیم لطفی
دانلود (http://s4.picofile.com/file/8170854350/Class4_Pattern.rar.html)


5
الگو های طراحی (Design Pattern SingleTon )
رحیم لطفی
دانلود (http://s4.picofile.com/file/8170855800/Class5_DesignPattern_SingleTon.rar.html)


6
الگو های طراحی (Design Pattern Multiton )
رحیم لطفی
دانلود (http://s4.picofile.com/file/8170857400/Class6_DesignPatternMultiton.rar.html)


7
الگو های طراحی (Design Pattern Pool )
رحیم لطفی
دانلود (http://s5.picofile.com/file/8170859650/Class7_DesignPattern_Pool.rar.html)


8
الگو های طراحی (Design Pattern )
رحیم لطفی
دانلود (http://pfr.blogfa.com/#)


9
الگو های طراحی (Design Pattern Builder)
رحیم لطفی
دانلود (http://s5.picofile.com/file/8170862984/Class9_DesignPattern_Builder.rar.html)


10
الگو های طراحی (Design Pattern Prototype )
رحیم لطفی
دانلود (http://s5.picofile.com/file/8170864942/Class10_DesignPattern_Prototype.rar.html)


11
الگو های طراحی (Design Pattern Responsability )
رحیم لطفی
دانلود (http://s4.picofile.com/file/8170866600/Class11_Chain_of_Responsability.rar.html)


12
الگو های طراحی (Design Pattern Command)
رحیم لطفی
دانلود (http://s5.picofile.com/file/8170868368/Class12_DesignPattern_Command.rar.html)


13
الگو های طراحی (Design Pattern Command2 )
رحیم لطفی
دانلود (http://s4.picofile.com/file/8170869876/Class13_DesignPattern_Command_Example.rar.html)


14
الگو های طراحی (Design Pattern interpreter )
رحیم لطفی
دانلود (http://s4.picofile.com/file/8170871092/Class14_DesignPattern_interpreter.rar.html)


15
الگو های طراحی (Design Pattern Mediator )
رحیم لطفی
دانلود (http://s4.picofile.com/file/8170872868/Class15_DesignPattern_Mediator.rar.html)


16
الگو های طراحی (Design Pattern Mediator )
رحیم لطفی
دانلود (http://s4.picofile.com/file/8170875242/Class16_designPattern_Mediator_Example.rar.html)


17
الگو های طراحی (Design Pattern Visitor )
رحیم لطفی
دانلود (http://s4.picofile.com/file/8170876926/Class17_DesignPattern_Visitor.rar.html)


18
الگو های طراحی (Design Pattern Visitor )
رحیم لطفی
دانلود (http://s5.picofile.com/file/8170878426/Class18_DesignPattern_Visitor_Example.rar.html)


19
ر الگو های طراحی (Design Pattern Adapter )
رحیم لطفی
دانلود (http://s5.picofile.com/file/8170879418/Class19_DesignPattern_Adapter.rar.html)


20
الگو های طراحی (Design Pattern Composite )
رحیم لطفی
دانلود (http://s5.picofile.com/file/8170880250/Class20_DesignPattern_Composite.rar.html)


21
الگو های طراحی (Design Pattern Decorator )
رحیم لطفی
دانلود (http://s4.picofile.com/file/8170881434/Class21_DesignPattern_Decorator.rar.html)


22
الگو های طراحی (Design Pattern Facade )
رحیم لطفی
دانلود (http://s4.picofile.com/file/8170882150/Class22_DesignPattern_Facade.rar.html)


23
الگو های طراحی (Design Pattern FlyWeight)
رحیم لطفی
دانلود (http://s5.picofile.com/file/8170883776/Class23_DesignPattern_FlyWeight.rar.html)


24
الگو های طراحی (Design Pattern Proxy)
رحیم لطفی
دانلود (http://s5.picofile.com/file/8170884492/Class24_DesignPattern_Proxy.rar.html)


25
الگو های طراحی (Design Pattern Proxy2 )
رحیم لطفی
دانلود (http://s5.picofile.com/file/8170885300/Class25_DesignPattern_Proxy_example.rar.html)


26
الگو های طراحی (Design Pattern Observer)
رحیم لطفی
دانلود (http://s4.picofile.com/file/8170886326/Class26_DesignPattern_Observer.rar.html)


27
الگو های طراحی (Design Pattern Observer2 )
رحیم لطفی
دانلود (http://s5.picofile.com/file/8170887434/Class27_DesignPattern_Observer2.rar.html)


28
الگو های طراحی (Design Pattern Memento )
رحیم لطفی
دانلود (http://s4.picofile.com/file/8170888468/Class28_DesignPattern_Memento.rar.html)


29
الگو های طراحی (Design Pattern State )
رحیم لطفی
دانلود (http://s5.picofile.com/file/8170889000/Class29_DesignPattern_State.rar.html)


30
مقدمه بر الگو های طراحی (Design Pattern State2 )
رحیم لطفی
دانلود (http://s5.picofile.com/file/8170889642/Class30_DesignPattern_State2.rar.html)


31
الگو های طراحی (Design Pattern Iterator )
رحیم لطفی
دانلود (http://s5.picofile.com/file/8170891100/Class31_DesignPattern_Iterator.rar.html)


32
الگو های طراحی (Design Pattern Startegy )
رحیم لطفی
دانلود (http://s4.picofile.com/file/8170891976/Class32_DesignPattern_Startegy.rar.html)


33
الگو های طراحی (Design Pattern Template )
رحیم لطفی
دانلود (http://s4.picofile.com/file/8170892450/Class33_Designpattern_Template.rar.html)

saeed410
چهارشنبه 05 آذر 1393, 01:04 صبح
سلام. بسیار مطلب مفیدی بود. ممنون از همه .

dalvand
شنبه 08 فروردین 1394, 21:10 عصر
با تشکر از شما ...
اگه برای هر کدام از اصول و الگو های طراحی یک نمونه کامل هم گذاشته بشه خیلی خوب میشه(هر چند نمونه های سطح بالا در اینترنت پیدا مشه ولی واسه یادگیری زیاد مناسب نیستند)

r_n_lovely
پنج شنبه 20 فروردین 1394, 13:09 عصر
سلام وقت بخير
ضمن سپاس فراوان از جناب رحيم لطفي
اگر لطف بكنند لينك رديف 8 را اصلاح نمايند سپاس گزارم.

8
الگو های طراحی (Design Pattern )
رحیم لطفی
دانلود (http://pfr.blogfa.com/#)

fotrosi
یک شنبه 17 آبان 1394, 13:19 عصر
با سلام ممنون از لطفتون. ممکنه لینک دانلودها رو دوباره بررسی کنید بسیاری از اونها وجود ندارند. با تشکر

MMR_1234
دوشنبه 18 آبان 1394, 08:15 صبح
باسپاس از لطفتون
لینک دانلودها از شماره 7 به بعد مشکل دارن ممنون میشم کنترل کنید

piroozman
چهارشنبه 21 مهر 1395, 00:37 صبح
آیا کسی سعی کرده تا به حال الگوهای طراحی را به صورت یک مولفه دربیاره. منظورم این هست که کتابخانه ای از الگوهای طراحی داشته باشیم و بتونیم به راحتی از آنها در برنامه های دات نت استفاده کرد؟ من تو اینترنت خیلی جستجو کردم و متوجه شدم که فقط به معرفی الگوها و نحوه استفاده از آنها اشاره شده است. البته قصد دارم چند الگویی را به صورت مولفه در بیارم و نیاز دارم کسی تو این راه کمکم کنه. کسی که تسلط کافی به سی شار‍پ داشته باشه. اگر کسی از دوستان علاقه مند به انجام این کار هست لطفا با بنده تماس بگیره. یا اگر کسی همچین کتابخانه رو سراغ داره لطفا لینک بده برای مطالعه یا دانلود. خیلی ممنون