مقدمه ای بر الگوهای طراحی


نیاز انسان ها به تاریخ از آنجا ناشی می شود که مشکلاتی که ما در زندگی شخصی یا جمعی خود با آنها مواجه می شویم، به احتمال زیاد قبل از ما برای کس دیگری هم اتفاق افتاده است. شاید در بسیاری از موارد، مشکلات دقیقا یکی نباشند، ولی مشکلاتی نیز وجود دارد که دقیقا یکسان هستند و به تناوب برای افراد مختلف پیش می آید. مشکلاتی شبیه به هم، که راه حل های مشابه هم دارند. به عنوان مثال یک پزشک کسی است که می داند برای یک مشکل تکراری، چه راه حلی باید ارائه کند. یک پزشک معمولا با بیمارانی سروکار دارد که دارای مشکلات مشابه هستند و درمان مشابه ای نیز نیاز دارند. در چنین مواردی تنها کاری که باید بکند دیدن علائم موجود در بیمار می باشد، چون قبلا کسی پیدا شده، الگوهایی تهیه کرده شامل علائم بیماری و درمان آن. هر چند دانستن این الگوها کفایت نمی کند، ولی می تواند بسیار مفید باشد. الگوهای طراحی در نرم افزار دقیقا همین کار را می کند. تعاریف ارائه شده برای الگو، تقریبا همگی حاوی مضمونی نزدیک به آنچه در بالا گفتیم، می باشد:
- یک الگو، یک راه حل تکرار شده برای یک مشکل می باشد.
- یک الگو، مشکلی را توصیف می کند که بارها و بارها اتفاق افتاده است.
- یک الگو، وسیله ای است برای ثبت و انتقال مهارت ها در یک زمینه خاص.
الگوهای مختلفی در نرم افزار وجود دارد: الگوی فرایند، الگوی طراحی، الگوی تحلیل و …. در این نوشته می خواهیم بر روی الگوهای طراحی متمرکز شویم. ثبت مهارت های طراحی در قالب یکسری الگوی طراحی، باید حداقل موارد زیر را برای یک الگوی طراحی شامل شود:
نام: عبارتی که الگو را توصیف کند.
مشکل: شرحی از مشکلی که قرار است توسط این الگوی طراحی راه حل آن بیان شود.
زمینه: چه وقت باید از این الگوی طراحی استفاده کرد.
راه حل: اجزاء طراحی که نیاز داریم و همچنین ارتباطات آنها.
الگوهای طراحی مزایای زیادی دارند ولی معجزه نمی کنند. با دانستن آنها ما به یک طراح نرم افزار تبدیل نمی شویم. هر مشکلی را نمی توان با آنها حل کرد و همچنین در صورتیکه از آنها استفاده نادرست بشود ممکن است باعث پیچیده تر شدن مسئله نیز بشود. ولی اگر استفاده درست و بجا از آنها صورت گیرد، می تواند بسیار مفید واقع شود. در ادامه چندین نمونه از الگوهای طراحی را با هم بررسی می کنیم. ابتدا از Singleton شروع می کنیم.

۱- Singleton
نام: Singleton!
مشکل: می خواهیم از یک کلاس تنها بتوان یک نمونه ایجاد کرد.
زمینه: وقتی که نیازی به بیش از یک نمونه نداریم یا دستیابی کنترل شده می خواهیم.
راه حل:

پیاده سازی:
برای پیاده سازی طراحی فوق در دلفی، یک class method ایجاد می کنیم با نام Instance. درخواست یک نمونه از کلاس از طریق این متد انجام خواهد شد و در داخل این متد، تست می کنیم که اگر قبلا یک نمونه از کلاس ایجاد نشده است، یک نمونه ایجاد کرده و ارجاع به آنرا به عنوان خروجی برگرداند در غیر اینصورت ارجاع به همان نمونه ایجاد شده به عنوان جواب برگشت داده می شود. در پیاده سازی انجام شده، فرض بر این است که می خواهیم از کلاس TSingletonForm یک نمونه بیشتر ایجاد نشود.

TSingletonForm = class(TForm)

public

class function Instance: TSingletonForm;
end;
implementation
var
SingletonFrm:TSingletonForm;
class function TSingletonForm.Instance: TSingletonForm;
begin
if not assigned(SingletonFrm) then
SingletonFrm := TSingletonForm.Create(Application);
result := SingletonFrm;
end;

همچنین در destructor فرم باید ارجاع SingletonFrm را برابر nil قرار داد و در رویداد OnClose فرم، نمونه ایجاد شده را آزاد کرد.

destructor TSingletonForm.Destroy;
begin
SingletonFrm := nil;
inherited Destroy;
end;
procedure TSingletonForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Release;
end;

2- Tamplate Method
مشکل: ساختار کلی یک الگوریتم را می دانیم ولی برخی از جزئیات آن، بستگی دارد به زیر کلاسی که از این کلاس مشتق می شود. می خواهیم این ساختار کلی را در کلاس بالاتر تعریف کنیم، به گونه ای که زیر کلاس ها تنها نیاز به تعریف جزئیات اختصاصی خود داشته باشند.
راه حل:

پیاده سازی:
در ادامه مثالی از پیاده سازی طراحی فوق در دلفی، آورده خواهد شد. در این مثال، یک کلاس TStream داریم که یک کلاس انتزاعی(abstract) می باشد. این کلاس متدی با نام CopyFrom دارد، که حاوی دو پارامتر می باشد. پارامتر اول مشخص کننده یک استریم است و پارامتر دوم تعداد را مشخص می کند. در این متد نیاز داریم تا از استریم ورودی بخوانیم و در استریم خروجی بنویسیم. خواندن و نوشتن در یک استریم بسته به نوع آن استریم، عملیات متفاوتی را لازم دارد. به عنوان مثال TFileStream باید عملیات خواندن و نوشتن را برای یک فایل انجام دهد و StringStream برای یک رشته. متد CopyFrom را به صورت یک Template Method در کلاس انتزاعی TStream تعریف می کنیم. متد CopyFrom ، برای عمل خواندن از متد Read و برای عمل نوشتن از متد Write استفاده می کند. دو متد انتزاعی برای کلاس TStream با نام های Read و Write تعریف می کنیم که این متدها باید در کلاس های مشتق شده از این کلاس پیاده سازی شوند.

{ TStream abstract class }
TStream = class(TObject)

public
// primitive operations to be provided by derived classes
function Read(var Buffer; Count: Longint): Longint; virtual; abstract;
function Write(const Buffer; Count: Longint): Longint; virtual; abstract

// template method
function CopyFrom(Source: TStream; Count: Longint): Longint;

end;
// concrete class
TStringStream = class(TStream)

public
constructor Create(const AString: string);
// concrete class implementations – varying behavior
function Read(var Buffer; Count: Longint): Longint; override;
function Write(const Buffer; Count: Longint): Longint; override;

end;
———
function TStream.CopyFrom(Source: TStream; Count: Longint): Longint;
begin

Source.Read(Buffer^, N);
Write(Buffer^, N);

end;
———
function TStringStream.Read(var Buffer; Count: Longint): Longint;
begin

end;
function TStringStream.Write(const Buffer; Count: Longint): Longint;
begin

end;

3- Strategy
مشکل: دسترسی به یکسری عملیات مشابه که پیاده سازی متفاوتی دارند. در Template Method ما الگوریتمی داشتیم که کلیات آن یکسان بود ولی در جزئیات ممکن بود متغیر باشد، در اینجا کل الگوریتم مورد استفاده بسته به کاربردش می تواند متغیر باشد.
راه حل:

با استفاده از Context، کلاس هایی که می خواهند به Strategy دسترسی پیدا کنند، مستقل از اینترفیس الگوریتم بکار برده شده در Strategy خواهند بود، زیرا می توانند از اینترفیس عمومی تری که بوسیله Context فراهم می شود، استفاده کنند. همچنین اینترفیس های Context و Strategy باید بدقت طراحی شوند تا بتوانند کلیه الگوریتم های ممکن را که می خواهیم در کلاس های واقعی(Concrete) پیاده سازی کنیم را در بربگیرد.
پیاده سازی:
به عنوان یک مثال، در نظر بگیرید که می خواهیم، شارژ ماهیانه یک کارت اعتباری را محاسبه کنیم. محاسبه میزان شارژ یک کارت اعتباری بسته به نوع آن کارت، الگوریتم های متفاوتی خواهد داشت. ما یک کلاس انتزاعی با عنوان TFinanzeCharge را ایجاد کنیم که به عنوان یک اینترفیس اجازه می دهد تا دسترسی واحدی به تمام پیاده سازی های ممکن برای کارت های اعتباری مختلف داشته باشیم. این کلاس، حاوی یک متد انتزاعی با عنوان getCharge می باشد که باید در کلاس های واقعی که از این کلاس مشتق می شوند، پیاده سازی شود. دو نوع شارژ برای کارت های اعتباری در نظر می گیریم: TRegularCharge و TPreferredCharge. در داخل این کلاس ها باید متد getCharge پیاده سازی شود.
یک کلاس انتزاعی با نام TChargeContext ایجاد می کنیم که به عنوان اینترفیسی برای کلیه کلاس هایی که می خواهند به TFinanzeCharge و کلاس های مشتق شده از آن دسترسی پیدا کنند عمل می کند. این کلاس حاوی یک متد انتزاعی با عنوان computeCharges می باشد. کلاس دیگری با عنوان TMonthlyCharges تعریف می کنیم که از کلاس TChargeContext مشتق می شود و شارژ ماهیانه را برای انواع کارت های اعتباری محاسبه می کند. پیاده سازی انجام شده در زبان دلفی به صورت زیر می باشد:

// strategy interface (abstract class)
TFinanzeCharge = class
public
// returns monthly finanze charge
function getCharge(const Balance: double): double; virtual; abstract;
end;

// Concrete Strategy
TRegularCharge = class(TFinanzeCharge)
public
function getCharge(const Balance: double): double; override;
end;

// Concrete Strategy
TPreferredCharge = class(TFinanzeCharge)
public
function getCharge(const Balance: double): double; override;
end;

// Context Interface
TChargeContext = class
public
function ComputeCharges(const Balance: double): double; virtual; abstract;
end;

// Concrete Context
TMonthlyCharges = class(TChargeContext)
private
FFinanzeCharge: TFinanzeCharge;
public
// context interface called by client classes
function ComputeCharges(const Balance: double): double; override;
// constructor configures the context object
constructor Create(aFinanzeCharge: TFinanzeCharge); virtual;
destructor Destroy; override;
end;

implementation
// TRegularCharge
function TRegularCharge.getCharge(const Balance: double): double;
begin
result := Balance * (REG_RATE / 12);
end;
// TPreferredCharge
function TPreferredCharge.getCharge(const Balance: double): double;
begin
result := Balance * (PREFERRED_RATE / 12);
end;

// Concrete Context
// TMonthlyCharges
constructor TMonthlyCharges.Create(aFinanzeCharge: TFinanzeCharge);
begin
inherited Create;
FFinanzeCharge := aFinanzeCharge;
end;

destructor TMonthlyCharges.Destroy;
begin
FFinanzeCharge.Free;
inherited Destroy;
end;

function TMonthlyCharges.ComputeCharges(const Balance: double): double;
begin
result := FFinanzeCharge.getCharge(Balance);
end;

4- Observer
مشکل: ایجاد یک وابستگی یک به چند بین اشیاء، به گونه ای که وقتی وضعیت یک شئ تغییر کرد، تمام اشیائی که به آن وابسته هستند، به صورت اتوماتیک باخبر شده و وضعیت خود را بروز نمایند.
راه حل:

در این طراحی، دو کلاس انتزاعی داریم که به عنوان اینترفیسی برای مشاهده شونده و مشاهده کننده عمل می کنند. هر مشاهده شونده باید بتواند لیستی از مشاهده کننده ها را در خود نگهداری کند و با استفاده از متد Add بتوان یک مشاهده کننده به آن اضافه کرد و با استفاده از Remove مشاهده کننده ای را از آن حذف کرد. همچنین هر مشاهده شونده باید قادر باشد تا تغییر وضعیت خود را به اطلاع کلیه مشاهده کننده ها برساند که اینکار را از طریق متد Notify انجام خواهد داد. این متد، با استفاده از همان لیست مشاهده کننده ها که نگهداری می شود، متد update هر مشاهده کننده را فراخوانی می کند.
هر مشاهده کننده، باید متدی با نام Update داشته باشد که در آن با استفاده از پارامتر ورودی شئ مشاهده شونده را دریافت کرده و سپس وضعیت آنرا دوباره بدست آورده و وضعیت خود را که وابسته به آن است را بروز نماید.
پیاده سازی:
در این مثال، کلاسی داریم با عنوان TMySubject که این کلاس حاوی یک متغیر داخلی با نام x می باشد. می خواهیم از مقدار این x برای نشان دادن پیشرفت در یک ProgressBar استفاده کنیم. بنابراین یک کلاس مشاهده کننده با عنوان TMyBar ایجاد می کنیم که حاوی یک TProgressBar می باشد. عملیات افزودن این کلاس به عنوان یک مشاهده کننده برای کلاس TMySubject و بروزرسانی آن نیز همانگونه که در بالا توضیح داده شد، پیاده سازی خواهد شد. بخش های اصلی کد مورد نیاز در زیر آمده است:

TObserver = class
procedure Update(ChangedSubject: TObservable); virtual; abstract;
end;

// Subject interface
TObservable = class
procedure Add(Observer: TObserver); virtual; abstract;
procedure Remove(Observer: TObserver); virtual; abstract;
procedure Notify; virtual; abstract;
end;
// concrete observable class
TMySubject = class(TObservable)
private
FObservers: TList;
Fx: integer;
public
constructor Create;
destructor Destroy; override;
procedure Add(Observer: TObserver); override;
procedure Remove(Observer: TObserver); override;
procedure Notify; override;
function getX: integer;
procedure setX(value: integer);
end;

// Concrete Observer Object
TMyBar = class(TObserver)
private
FBarX: TProgressBar;
public
constructor CreateBar(aParent: TWinControl);
destructor Destroy; override;
procedure Update(ChangedSubject: TObservable); override;
end;

مرجع:

Ader Gonzalez, Introduction to Design Patterns for Delphi Developers, May 28, 1998.


نوشته شده توسط حسن شجاعی در یکشنبه ۲۷ فروردین ۱۳۸۵ |


۹۱ پاسخ برای “مقدمه ای بر الگوهای طراحی”

  1. توسط millerpelf در آبان ۳, ۱۳۸۸ | پاسخ

    water expected process attributed lapse place concentrations

  2. توسط thaxtervil در آبان ۱۲, ۱۳۸۸ | پاسخ

    affected particularly primary less lapse societies production

  3. توسط brinawinde در آبان ۱۲, ۱۳۸۸ | پاسخ

    notes ipcc code company signed

  4. توسط cheresseha در آبان ۲۲, ۱۳۸۸ | پاسخ

    indicate rays 2009 increases forcings scientists stance

  5. توسط galtunder در آبان ۲۲, ۱۳۸۸ | پاسخ

    kyoto gross mitigating economic estimate home upper

  6. توسط lashaeveac در دی ۸, ۱۳۸۸ | پاسخ

    due atmosphere geological melting melts 103

  7. توسط tollandkro در دی ۸, ۱۳۸۸ | پاسخ

    processes mid fall functionality scale probably protocol

  8. توسط sketesgeno در دی ۱۷, ۱۳۸۸ | پاسخ

    protocol jaiku feedback energy compared

  9. توسط EwingMARIAN26 در اسفند ۱۵, ۱۳۸۸ | پاسخ

    Some time ago, I really needed to buy a building for my organization but I did not have enough cash and could not order anything. Thank God my mother suggested to try to get the credit loans from trustworthy creditors. So, I did that and was satisfied with my student loan.

  10. توسط detox foot spa در خرداد ۲, ۱۳۸۹ | پاسخ

    Sorry for the huge review, but I’m really loving the new Zune, and hope this, as well as the excellent reviews some other people have written, will help you decide if it’s the right choice for you.

  11. توسط detox foot spa در خرداد ۵, ۱۳۸۹ | پاسخ

    Zune and iPod: Most people compare the Zune to the Touch, but after seeing how slim and surprisingly small and light it is, I consider it to be a rather unique hybrid that combines qualities of both the Touch and the Nano. It’s very colorful and lovely OLED screen is slightly smaller than the touch screen, but the player itself feels quite a bit smaller and lighter. It weighs about 2/3 as much, and is noticeably smaller in width and height, while being just a hair thicker.

  12. توسط Feveantee در مهر ۲, ۱۳۸۹ | پاسخ

    viagra pill picture,viagra buy cheap 345)()(

  13. توسط Feveantee در مهر ۳, ۱۳۸۹ | پاسخ

    viagra kopen,viagra cheap online 345)()(

  14. توسط Feveantee در مهر ۳, ۱۳۸۹ | پاسخ

    side effects of lipitor,Lipitor cost 345)()(

  15. توسط Holgar در مهر ۵, ۱۳۸۹ | پاسخ

    I’ll gear this review to 2 types of people: current Zune owners who are considering an upgrade, and people trying to decide between a Zune and an iPod. (There are other players worth considering out there, like the Sony Walkman X, but I hope this gives you enough info to make an informed decision of the Zune vs players other than the iPod line as well.)

  16. توسط Garrett Asper در مهر ۹, ۱۳۸۹ | پاسخ

    Hi. I study a couple of of the other posts and wanted to understand if you would be interested in exchanging blogroll links?

  17. توسط Firsts در مهر ۱۷, ۱۳۸۹ | پاسخ

    genuinely amazing !?! I’ve only ordered a cell phones app improvement at codingate, they rapidly planned genuine considerable and also more than inexpensive developpers who produced the issue into couple on a short time!!mobile – telecom and also voip – net – desktop applications .

  18. توسط us cellular iphone در مهر ۲۰, ۱۳۸۹ | پاسخ

    hello boss, was just browsing through the online searching being Some information as well as came across Your New site.

  19. توسط Mobil Keluarga Ideal Terbaik Indonesia در مهر ۲۱, ۱۳۸۹ | پاسخ

    just wanna commentabout this content, after reading whole as to this this make me how to allow brand new target about a important end result, hope I may Read more quality news again from end users so I bookmark Ones website.

  20. توسط new technology news در مهر ۲۱, ۱۳۸۹ | پاسخ

    I can see that you’re putting a lots on efforts into your url. Keep posting the good work.Some okay helpful information into there. Bookmarked. Nice To see your site. Thanks! sory my english bad i am an arabic

  21. توسط Elois Gellert در مهر ۲۲, ۱۳۸۹ | پاسخ

    Your post could be very informative and bring a greater understanding of what you’ve gotten introduced up. Thank you

  22. توسط Mobil Keluarga Ideal Terbaik Indonesia در مهر ۲۲, ۱۳۸۹ | پاسخ

    Couldn’t be written any one better. read this post reminds me as to my old room mate! He always kept talking about this. I went forward this content how to him. Pretty sure he will have on a excellent read. Thanks as sharing!sory my english bad i am an filipines

  23. توسط Stopping Smoking NOW در مهر ۲۴, ۱۳۸۹ | پاسخ

    “I normally really do not article in Blogs but your weblog pressured me to, incredible work.. stunning …”

  24. توسط Visit Korcula Lumbarda Croatia در مهر ۲۷, ۱۳۸۹ | پاسخ

    Bilin Zal is a bit smaller, also sandy beach in the close proximity to the village of Lumbarda. This beach is very much accepted by tourists and the locals that fill it starting from the early summer. It is also suitable for small children. This beach can be reached also by taxi boat.

  25. توسط conference call phone در مهر ۲۹, ۱۳۸۹ | پاسخ

    I mail you a correspondence on the subject of your article. I establish it very attractive and effective. I wish for to talk by mail. I imagine you’re the one hot at this subject.

  26. توسط cheap iphone ebay در مهر ۲۹, ۱۳۸۹ | پاسخ

    Hi, I’m in truth fascinated on Linux but Im a Super Newbie and I’m having trouble deciding at the right distribution for me (Havent consumers heard this a mill times?) anyway here is my Trouble, I basic a distribution which may switch between reading and writing on English and also Japanese (Japanese Language Support) using out restarting the operating system.

  27. توسط loans در مهر ۲۹, ۱۳۸۹ | پاسخ

    Date Hello, I have browsed most of your posts. This post is probably where I got the most useful information for my research. Thanks for posting, maybe we can see more on this. Are you aware of any other websites on this subject

  28. توسط babyborn در مهر ۳۰, ۱۳۸۹ | پاسخ

    Exactly where may I get this Blog?

  29. توسط go 910 gps در مهر ۳۰, ۱۳۸۹ | پاسخ

    Where exactly may I get this particular system?

  30. توسط go910 در آبان ۱, ۱۳۸۹ | پاسخ

    Exactly where could I find this page layout?

  31. توسط free avatars در آبان ۱, ۱۳۸۹ | پاسخ

    I enjoyed seeing this, i’ve been thinking about this for a while.

  32. توسط Gaylord Szewczak در آبان ۱, ۱۳۸۹ | پاسخ

    Hello admin, I found Ones site from google as well as look over a few of Your a selection of posts as well as I should say they’re superb, please carry build up the great work!!!! Greets

  33. توسط Donnetta Peightal در آبان ۱, ۱۳۸۹ | پاسخ

    Took me time To look over all the comments, but I truly loved the content. this proved To be ideal assistive how to me and also I am sure To all the commenters here! It’s always good when you can not only be informed, but as well gratified!

  34. توسط How to Burn wii Games در آبان ۱, ۱۳۸۹ | پاسخ

    “Super-Duper internet site! I am loving it!!! Will occur again again - getting you feeds also, Thank you.”

  35. توسط watch movies free online در آبان ۲, ۱۳۸۹ | پاسخ

    You are a very smart person!

  36. توسط watch free movie online در آبان ۲, ۱۳۸۹ | پاسخ

    Very detailed and helpful post. Well said and written.

  37. توسط kayak در آبان ۲, ۱۳۸۹ | پاسخ

    wAw, this i has a truly great content. into theory I’d like how to write like this this also - taking time as well as real effort how to make a good article… but what can I say… I procrastinate alot and also Don’t seem how to get something done.sory my english bad i am an filipines

  38. توسط buy or sell magic the gathering cards در آبان ۴, ۱۳۸۹ | پاسخ

    A subject near to my heart thanks, i’ve been wondering about this for a while.

  39. توسط How to get a six pack در آبان ۵, ۱۳۸۹ | پاسخ

    how to get a six pack. Would you like to know how to get a six pack fast?

  40. توسط luxury tavel ticket در آبان ۵, ۱۳۸۹ | پاسخ

    I own, I require not been at this webpage to a lengthy time… however this i has another ecstasy how to spy this is such an significant issue as well as ignored by so Countless, monotonous professionals. I credit buyers how to usurp making people more aware on viable issues.

  41. توسط orange electrician در آبان ۶, ۱۳۸۹ | پاسخ

    Please visit my site fopr better information about electrician.Thank you

  42. توسط cheap ipod در آبان ۶, ۱۳۸۹ | پاسخ

    Do you like apple product ? if you like it,please come to my site . thank you dude

  43. توسط coupons در آبان ۶, ۱۳۸۹ | پاسخ

    Hello my friend,How are you ? iam coming again to your blog :p Thanks

  44. توسط Coupon Code در آبان ۶, ۱۳۸۹ | پاسخ

    Hello my friend,How are you ? iam coming again to your blog :p Thanks

  45. توسط Shop Clothing در آبان ۶, ۱۳۸۹ | پاسخ

    Do you like shopping ?please visit my site catalogspot.com thanks

  46. توسط car wash sacramento در آبان ۷, ۱۳۸۹ | پاسخ

    I liked seeing this, i’ve been thinking about this for a while.

  47. توسط drum fills در آبان ۷, ۱۳۸۹ | پاسخ

    Old habits die hard

  48. توسط Estelle Arendall در آبان ۸, ۱۳۸۹ | پاسخ

    Whats the problem with this idea dude ? is it okay with you ? Thanks dude

  49. توسط http://www.squidoo.com/cold-sore-home-treatment- در آبان ۸, ۱۳۸۹ | پاسخ

    Couldn’t be written any better. Reading this post reminds me of my old room mate! He always kept talking about this. I will forward this article to him. Pretty sure he will have a good read. Thanks for sharing!

  50. توسط make your own music در آبان ۹, ۱۳۸۹ | پاسخ

    Keep up the great work!

  51. توسط tweetattacks review در آبان ۹, ۱۳۸۹ | پاسخ

    Found y0ur cool website through g00gle good job

  52. توسط government auction Houston در آبان ۹, ۱۳۸۹ | پاسخ

    I just sent this post to a bunch of my friends as I agree with most of what you’re saying here and the way you’ve presented it is awesome.

  53. توسط omega3 در آبان ۱۰, ۱۳۸۹ | پاسخ

    Im happy I found this website, I couldnt get any information on this subject prior to. I also manage a website and if you want to ever serious in doing some visitor writing for me if possible feel free to let me know, im always look for people to check out my blog page. Please stop by and leave a comment sometime!

  54. توسط order checks در آبان ۱۰, ۱۳۸۹ | پاسخ

    Motivating blog

  55. توسط order checks online در آبان ۱۰, ۱۳۸۹ | پاسخ

    Well said! - I looked at the Wiki on this and it did not have as good info - thanks!

  56. توسط Tammie Bastilla در آبان ۱۰, ۱۳۸۹ | پاسخ

    I would like to many thanks for the efforts you have made in writing this post. I am hoping the same best work from you in the future as well. I loved your style I will register for your feed please keep posting!

  57. توسط Dorthy Delprete در آبان ۱۰, ۱۳۸۹ | پاسخ

    Spyware can be a real pain as well as to A few cases severly damaging. I think of which I basic To have on a spyware blocker otherwise my computer just gets overrun with spyware. The the very best selling removers like us spyware doctor do really work as well as have to be worth the investment. A few as to the ‘free’ spyware blockers in most cases are actually spyware in disguise!

  58. توسط Major Urso در آبان ۱۰, ۱۳۸۹ | پاسخ

    Perceptive word, valuable as well as first-rate map, as cost saving conventional bits by ethical thoughts as well as concepts, lots as to very important intelligence and inspiration, both as for which we all basic, thanks as all the passion To presentation such helpful info here.

  59. توسط buy xanax xr در آبان ۱۱, ۱۳۸۹ | پاسخ

    Xanax is in a get together of medication referred to as benzodiazepines (ben-zoe-dye-AZE-eh-peens).

  60. توسط harley davidson در آبان ۱۱, ۱۳۸۹ | پاسخ

    The wealth of the mind is the only wealth.

  61. توسط Lera Purdum در آبان ۱۱, ۱۳۸۹ | پاسخ

    I truly be pleased with Ones site. could let me acknowledge how I can go when it comes to subscribing by it? using the way I stumbled upon Ones New blog across Aol.

  62. توسط wózki dziecięce wielofunkcyjne در آبان ۱۲, ۱۳۸۹ | پاسخ

    It is quite a useful point! In reality wanna show gratitude for that information you have divided. Just keep on creating this form of content. I most certainly will be your faithful subscriber. Thanks again.

  63. توسط Gala Schuble در آبان ۱۲, ۱۳۸۹ | پاسخ

    Good Morning sir, i like your news ! Have a nice weekend

  64. توسط Gemstones در آبان ۱۲, ۱۳۸۹ | پاسخ

    To be a adroit lenient being is to be enduring a make of openness to the world, an cleverness to guardianship unsure things beyond your own restrain, that can govern you to be shattered in very exceptionally circumstances pro which you were not to blame. That says something uncommonly impressive relating to the condition of the honest passion: that it is based on a corporation in the up in the air and on a willingness to be exposed; it’s based on being more like a spy than like a treasure, something rather tenuous, but whose very item beauty is inseparable from that fragility.

  65. توسط government auto auction Douglas در آبان ۱۲, ۱۳۸۹ | پاسخ

    I just sent this post to a bunch of my friends as I agree with most of what you’re saying here and the way you’ve presented it is awesome.

  66. توسط Denice Theberge در آبان ۱۲, ۱۳۸۹ | پاسخ

    Awesome post mate.

  67. توسط famous bisexual men در آبان ۱۳, ۱۳۸۹ | پاسخ

    Right between the eyes

  68. توسط Allen Gutierres در آبان ۱۳, ۱۳۸۹ | پاسخ

    Place tracing paper more than the graph and secure it with tape. Mark the location of the brand new walls and how they may be connected towards the rooms that are subsequent to it. When designing this floor strategy it is your objective to create some thing that will flow naturally, provide more space, and become much more functional with out taking from the overall appearance of it.

  69. توسط Brook Chauvaux در آبان ۱۳, ۱۳۸۹ | پاسخ

    You have a unique style of penning. You desreve to have the incoming suggestions and comments are positive as yours.

  70. توسط Marcus Hollendonner در آبان ۱۳, ۱۳۸۹ | پاسخ

    Took me time To look over all The comments, rather I really loved the article. it proved how to be in truth useful how to me as well as I am certain how to most the commenters as of now! it’s routinely pleasing If you consumers may never only be informed, but as well entertained! I’m believe consumers had enjoyable making up this content.

  71. توسط Mercy Merz در آبان ۱۳, ۱۳۸۹ | پاسخ

    I’ve Bookmarked this Because I found it interesting. I may be very mesmerized To hear more news by stuff like this. Hi and thanks!

  72. توسط ahmad khawaja در آبان ۱۳, ۱۳۸۹ | پاسخ

    This is just cutting out the middle man…the bartender. I was driving down an alley on a Saturday morning near a college area hangout and the garbage can behind a few pubs was full of empty cans of red bull. A bartender friend of mine said they mix the stuff with just about anything.Nice…get hammered and be WIDE AWAKE. Kids today don’t know how to handle it. Back in “the old days”…you drank, got drunk, fell down, and either got up and into a fight or went to sleep. Now you drink, get drunk, stay awake, drink more, die or get into a car and think you can drive “buzzed”.

  73. توسط online news در آبان ۱۳, ۱۳۸۹ | پاسخ

    Investigation portals like this 1 aggregate final results from numerous investigation engines into a single web page.

  74. توسط do follow در آبان ۱۳, ۱۳۸۹ | پاسخ

    Good night dude, i like your news site ! Have a nice weekend

  75. توسط Latia Delouise در آبان ۱۳, ۱۳۸۹ | پاسخ

    Perceptive word, valuable and 1st-rate map, as offer conventional bits with ethical ideas and also concepts, lots on significant intelligence and inspiration, both on which we all basic, thanks as all the passion To presentation such helpful info here.

  76. توسط office furniture در آبان ۱۴, ۱۳۸۹ | پاسخ

    Bookmarking now cheers, needed a few more pictures maybe.

  77. توسط ambien oral در آبان ۱۴, ۱۳۸۹ | پاسخ

    Bring Ambien treatment with a full glass of water. Steer clear of getting Ambien CR with or just soon after a meal or it may possibly consider lengthier for you to drop asleep. Ambien is for quick-term use only.

  78. توسط Soma no prescription در آبان ۱۴, ۱۳۸۹ | پاسخ

    Soma remedy may possibly be habit-forming and really should be utilised only by the particular person it was recommended for.

  79. توسط increase در آبان ۱۴, ۱۳۸۹ | پاسخ

    where did u obtain this instructions

  80. توسط Buy Tramadol online در آبان ۱۴, ۱۳۸۹ | پاسخ

    Low cost Tramadol capsules on-line with no rx

  81. توسط levitra pills در آبان ۱۴, ۱۳۸۹ | پاسخ

    Levitra is normally taken only when essential, about 60 minutes before sexual exercise. The medication can aid attain an erection when sexual stimulation takes place. An erection will not arise just by taking a pill. Adhere to your doctor’s directions.

  82. توسط ahmad khawaja در آبان ۱۵, ۱۳۸۹ | پاسخ

    Only fools and horses work

  83. توسط Seminar Jakarta Indonesia 2011 در آبان ۱۵, ۱۳۸۹ | پاسخ

    Iam coming again sir to visit your blog.Please visit me too

  84. توسط Carola Tigg در آبان ۱۶, ۱۳۸۹ | پاسخ

    Hi buddy. My spouse as well as i really just liking The post and The site all in all! that content is genuinely okay plainly written and also very easily understandable. Your New WordPress theme is impressive in addition! may definitely be unbelievable To learn where I in most cases are capable download which. be certain To keep up up The great work. we all need even even more these kinds on internet owners such as consumers on the Web and also much less spammers. great mate!משכנתא

  85. توسط malware and viruses در آبان ۱۶, ۱۳۸۹ | پاسخ

    I just sent this post to a bunch of my friends as I agree with most of what you’re saying here and the way you’ve presented it is awesome.

  86. توسط will i lose weight if i fast for 24 hours در آبان ۱۶, ۱۳۸۹ | پاسخ

    I’ve been visiting your blog for a while now and I always find a gem in your new posts. Thanks for sharing.

  87. توسط Quincy Jankowski در آبان ۱۶, ۱۳۸۹ | پاسخ

    Hi acquaintance. My partner as well as i really just like this The post as well as The site all in most! that article is in truth really plainly written and also as well very quickly understandable. Your New WordPress theme is impressive as well! would for a fact be excellent how to master where I probably are competent download that. be sure how to keep up The super the job. people most require every more these types of web owners like us end users on The Internet and also a lot rarer spammers. good mate!משכנתא

  88. توسط trojan remover for free در آبان ۱۶, ۱۳۸۹ | پاسخ

    Thank You For This Post, was added to my bookmarks.

  89. توسط Ashley Porteus در آبان ۱۶, ۱۳۸۹ | پاسخ

    Couldn’t be written any better off. reading this post reminds me on my old room mate! He always kept talking about this. I will forward this content To him. Pretty sure he will allow a excellent read. Thanks for sharing!sory my english bad i am an filipines

  90. توسط Spencer Palaspas در آبان ۱۶, ۱۳۸۹ | پاسخ

    you can allow not intended how to do so, but I think you have managed To express the state of mind that a lot as for persons are to. The sense of wanting how to support, but not knowing how or where, is something a lot as for us are going through. sory my english bad i am an

  91. توسط management software در آبان ۱۷, ۱۳۸۹ | پاسخ

    One additional amazing site article. I shared stuff like this one going on my Facebook – you can look at adding a “liking” button To Ones New website.

ارسال نظر