# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > C#‎‎ >  آشنایی با الگوهای طراحی - Design Pattern

## sinpin

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

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

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


موفق باشید.

----------


## sinpin

*تاریخچه 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 :

* یک گروه چهار نفره شامل :
Gamma, ErichRichard HelmRalph JohnsonJohn Vlissidesملقب به Gang of Four یا GoF هستند. این گروه در 21 اکتبر سال 1994 کتابی را تحت عنوان :
_Design Patterns: Elements of Reusable Object-Oriented Software_ 
منتشر کردند. (این کتاب تا تاریخ آوریل 2007، سی و 6 بار تجدید چاپ شده است) 
آنها در این کتاب 23 الگوی طراحی کلاسیک رو با زبانهای OO مطرح در آنزمان (++C و Smalltalk) برای اولین بار مورد بحث قرار دادند.

*دسته بندی کلاسیک الگوها :*
این 23 الگو طبق دسته بندی فرض شده توسط آنها (که هنوز هم رعایت میشود) در 3 گروه زیر جای گرفتند : *Creational patterns*
Abstract factoryFactory methodBuilderPrototypeSingleton* Structural patterns
*AdapterBridgeCompositeDecoratorFacadeFlyweightProxy* Behavioral patterns
*Chain of responsibilityCommandInterpreterIteratorMediatorMementoObserverStateStrategyTemplate methodVisitor

----------


## sinpin

*Singleton Pattern*


این 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://en.wikipedia.org/wiki/Singleton_pattern
http://www.dofactory.com/Patterns/PatternSingleton.aspx

----------


## sinpin

*Decorator Pattern*
 

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

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

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


یک مثال : 
http://www.codeproject.com/KB/archit...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

لینک زیر یک مثال واقعی و بسیار مفید از این الگو است (فصل سوم کتاب head first که بصورت رایگان عرضه میشود)
پیشنهاد میکنم حتما دانلود و مشاهده کنید :
http://www.oreilly.com/catalog/hfdes...apter/ch03.pdf

----------


## sinpin

*Command Pattern*



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

**Command* *(Command)*
declares an interface for executing an operation 
*ConcreteCommand* *(CalculatorCommand)*
defines a binding between a Receiver object and an actionimplements 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 را در زیر مشاهده میکنید
در این مثال ما یک ماشین حساب با تعداد نامتناهی عملیات 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)
> ...


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

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

----------


## sinpin

*Observer Pattern

*

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

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

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

منابع :‌ 
http://en.wikipedia.org/wiki/Observer_pattern
http://www.dofactory.com/Patterns/PatternObserver.aspx
http://msdn.microsoft.com/library/de...erverInNET.asp
http://www.codeproject.com/kb/archit...ilKumarKS.aspx

----------


## razavi_university

*Prototype** Pattern

* 

یکی از الگوهای  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.dofactory.com/Patterns/PatternPrototype.aspx

نمونه کدی از CodeProject برای نمایش اتباطات صوتی از طریق شبکه با Prototype

----------


## razavi_university

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



*Head First Design Patterns Poster*

----------


## رضا عربلو

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

----------


## razavi_university

دوست عزیز اگه خوب به اون لینکی که گذاشتم دقت می کردید می‌دید که این پوستر رایگان نیست به خاطر همین هم یک شکل کوچک ازش قرار دادن
شما هم اگه پوستر بزرگ قابل چاپ می‌خوایید خوب، جستجو کنین ;)
به علت قوانین سایت نمی‌تونم لینک دانلود بدم

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

----------


## Parham.D

براي Design Pattern، PDF وجود نداره تا به شه مثل يك جزو داشته باشيم. آخه من تازه كار هستم. اين مطالب خوب واسه من يه كم سنگينه و درست نمي‏فهمم.

----------


## razavi_university

تنها منبع فارسی که من دیده ام کتاب جناب وحید نصیری بود

----------


## nalix85

جمع بندي حرفهاي فوق و برخي اطلاعات از منابع ديگر را مي توانيد در اين فايل بخوانيد.

----------


## esmaeily-hosein

اینم  PDf خوبیه . 
http://www.4shared.com/file/11530711...in_CSharp.html

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

----------


## Coward

دوستان اگر کسی میتونه   pattern Composite  را توضیح بده
ممنون

----------


## dr_jacky_2005

سلام
میشه Bridge Pattern هم توضیح بدین؟

----------


## omid195

سلام كسي در مورد repository pattern مطلبي داره ممنون ميشم ...

----------


## Amir Oveisi

> دوستان اگر کسی میتونه   pattern Composite  را توضیح بده
> ممنون


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

----------


## Amir Oveisi

> سلام
> میشه Bridge Pattern هم توضیح بدین؟


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

----------


## Amir Oveisi

> سلام كسي در مورد repository pattern مطلبي داره ممنون ميشم ...


http://giorgiosironi.blogspot.com/20...y-pattern.html

----------


## saghar14sahba

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

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

----------


## rahimlotfi

سلام 
تقدیم به همه دوستان و عزیزان  
الگوهای طراحی 
 1
 *مقدمه بر  الگو های طراحی (Design Pattern )*
 رحیم لطفی
 دانلود

  2
 *مقدمه بر  الگو های طراحی (Design Pattern )*
 رحیم لطفی
 دانلود

  3
 *مقدمه بر  الگو های طراحی (Design Pattern )*
 رحیم لطفی
 دانلود

  4
 *مقدمه بر  الگو های طراحی (Design Pattern )*
 رحیم لطفی
 دانلود

  5
 *  الگو های طراحی (Design Pattern SingleTon )*
 رحیم لطفی
 دانلود

  6
 *  الگو های طراحی (Design Pattern Multiton )*
 رحیم لطفی
 دانلود

  7
 *  الگو های طراحی (Design Pattern Pool )*
 رحیم لطفی
 دانلود

  8
 *  الگو های طراحی (Design Pattern )*
 رحیم لطفی
 دانلود

  9
 *  الگو های طراحی (Design Pattern Builder)*
 رحیم لطفی
 دانلود

  10
 *  الگو های طراحی (Design Pattern Prototype )*
 رحیم لطفی
 دانلود

  11
 * الگو های طراحی (Design Pattern Responsability )*
 رحیم لطفی
 دانلود

  12
 *  الگو های طراحی (Design Pattern Command)*
 رحیم لطفی
 دانلود

  13
 *  الگو های طراحی (Design Pattern Command2 )*
 رحیم لطفی
 دانلود

  14
 *  الگو های طراحی (Design Pattern interpreter )*
 رحیم لطفی
 دانلود

  15
 * الگو های طراحی (Design Pattern Mediator )*
 رحیم لطفی
 دانلود

  16
 *  الگو های طراحی (Design Pattern Mediator )*
 رحیم لطفی
 دانلود

  17
 *  الگو های طراحی (Design Pattern Visitor )*
 رحیم لطفی
 دانلود

  18
 *  الگو های طراحی (Design Pattern Visitor )*
 رحیم لطفی
 دانلود

  19
 *ر  الگو های طراحی (Design Pattern Adapter )*
 رحیم لطفی
 دانلود

  20
 *  الگو های طراحی (Design Pattern Composite )*
 رحیم لطفی
 دانلود

  21
 * الگو های طراحی (Design Pattern Decorator )*
 رحیم لطفی
 دانلود

  22
 *  الگو های طراحی (Design Pattern Facade )*
 رحیم لطفی
 دانلود

  23
 *  الگو های طراحی (Design Pattern FlyWeight)*
 رحیم لطفی
 دانلود

  24
 *  الگو های طراحی (Design Pattern Proxy)*
 رحیم لطفی
 دانلود

  25
 *  الگو های طراحی (Design Pattern Proxy2 )*
 رحیم لطفی
 دانلود

  26
 *  الگو های طراحی (Design Pattern Observer)*
 رحیم لطفی
 دانلود

  27
 *  الگو های طراحی (Design Pattern Observer2 )*
 رحیم لطفی
 دانلود

  28
 *  الگو های طراحی (Design Pattern Memento )*
 رحیم لطفی
 دانلود

  29
 *  الگو های طراحی (Design Pattern State )*
 رحیم لطفی
 دانلود

  30
 *مقدمه بر  الگو های طراحی (Design Pattern State2 )*
 رحیم لطفی
 دانلود

  31
 *  الگو های طراحی (Design Pattern Iterator )*
 رحیم لطفی
 دانلود

  32
 *  الگو های طراحی (Design Pattern Startegy )*
 رحیم لطفی
 دانلود

  33
 *  الگو های طراحی (Design Pattern Template )*
 رحیم لطفی
 دانلود

----------


## saeed410

سلام. بسیار مطلب مفیدی بود. ممنون از همه .

----------


## dalvand

با تشکر از شما ...
اگه برای هر کدام از اصول و الگو های طراحی یک نمونه کامل هم گذاشته بشه خیلی خوب میشه(هر چند نمونه های سطح بالا در اینترنت پیدا مشه ولی واسه یادگیری زیاد مناسب نیستند)

----------


## r_n_lovely

سلام وقت بخير
ضمن سپاس فراوان از جناب رحيم لطفي
اگر لطف بكنند لينك رديف 8 را اصلاح نمايند سپاس گزارم.8
*الگو های طراحی (Design Pattern )*
رحیم لطفی
دانلود

----------


## fotrosi

با سلام ممنون از لطفتون. ممکنه لینک دانلودها رو دوباره بررسی کنید بسیاری از اونها وجود ندارند. با تشکر

----------


## MMR_1234

باسپاس از لطفتون
 لینک دانلودها از شماره 7 به بعد مشکل دارن ممنون میشم کنترل کنید

----------


## piroozman

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

----------

