بررسی الگوهای طراحی singleton و chain of responsibility

34
ی ح را ط وهای گ ل ی ا س ر ر بSingleton وChain of Responsibility ی ح ل صا روش س ه ت ف ر ش! ی# پ ار ز ف رما ب ی س د ن ه م

Upload: soroush-salehi

Post on 12-Apr-2017

45 views

Category:

Science


8 download

TRANSCRIPT

Page 1: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

بررسی الگو های طراحیSingleton و Chain of

Responsibilityسروش صالحی

مهندسی نرم افزار پیشرفته

Page 2: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

SingletonCREATIONAL PATTERN

Page 3: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

3

Singleton-Intentهدف

اطمینان از وجود تنها یک نمونه از یک کالس و نقطه دسترسی سراسری به آن ◦[1]نمونه.

[2اطمینان از وجود تنها یک نمونه بدون توجه به میزان تعداد ساخت نمونه.]◦

SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS

Page 4: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

4

Singleton-Motivationانگیزش

از آن کالس اهمیت دارد.تنها یک نمونه برای برخی از کالس ها داشتن ◦در یک سیستم چندین چاپگر داریم اما تنها به یک صف چاپگر نیاز داریم.◦برای هر سیستم عامل تنها یک سیستم فایل داریم.◦تنها یک نشانگر موس در سیستم نیاز داریم.◦

راه حل مسئولیت بررسی منحصر به فرد بودن نمونه را به عهده خود کالس بگذاریم.◦کالس می تواند با جلوگیری از درخواست ساخت نمونه جدید مطمئن شود نمونه دیگری ◦

ساخته نشود.کالس باید راهی برای دسترسی به نمونه ارائه دهد.◦

SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS

Page 5: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

5

Singleton-Applicabilityکاربرد استفاده می شود که:Singletonزمانی از الگوی

باید دقیقا یک نمونه از کالس داشته باشیم و این نمونه توسط کاربرانI دسترس پIذیر باشد ◦[1]

یک نمونه منحصر به فرد باید توسط زیر کالس توسعه بپذیرد و کاربران بدون تغییر ◦[1کدشان به نمونه توسعه یافته دسترسی داشته باشند ]

[2محدودیت استفاده از منابع ]◦[2محدودیت دسترسی به شی حساس )مهم( توسط چندین نمونه ]◦[2اشتراک داده بین اشیاء ]◦[4( ]loggerکالس واقعه نگار )◦[ 4کالس پیکربندی تنظیمات یک برنامه ]◦

SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS

Page 6: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

6

Singleton-Structureساختار

Singleton

Static Instance()

SingletonOperation()

GetSingletonData()

Static uniqueInstance

SingletonData

Return uniqueInstance

SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS

Singleton [1]ساختار الگوی

Page 7: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

7

Singleton-Structureساختار

Singleton

-Instance:Singleton

-Singleton()

+Static Instance():Singleton

SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS

Singleton [3]ساختار الگوی

Client

Page 8: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

8

Singleton-Participantsشرکت کنندگان

مسئول ساخت نمونه یکتای خودش استSingletonکالس ◦یک تابع برای دسترسی کاربر به نمونه منحصر به فرد◦

SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS

Page 9: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

9

Singleton-Collaborationsهمکاران

از طریق یک تابع دسترسی دارند.singletonکاربران به نمونه منحصر به فرد ◦

SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS

Page 10: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

10

Singleton-Consequencesپیامدها

کنترل دسترسی به نمونه منحصر به فردکاهش فضای ناممجوز پاالیش عملیات و نمایشمجوز تعداد متغیر از نمونه هامنعطف تر نسبت به عملیات کالس

SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS

Page 11: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

11

Singleton-Implementationپیاده سازی چالش های پیاده سازی الگو:

تضمین یک نمونه یکتا◦ در سیستم های چند نخیSingletonاستفاده ◦Singletonارث بری از کالس ◦

SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS

Page 12: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

12

Singleton-Sample Code

SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS

public sealed class SingleTon { private static volatile SingleTon Instance; private static object _lock = new object(); public String Name;

private SingleTon() { }

public static SingleTon Getinstance() { if (Instance == null) { lock (_lock) { if (Instance == null) Instance = new SingleTon(); } } return Instance; }}

#C با زبان Singletonنمونه کد الگوی طراحی

[4]نمونه کد ناممکن بودن ایجاد نمونه خارج از کالس ◦

بطور مستقیمغیر قابل ارث بری◦امن در محیط های چند نخی◦

◦lazy instantiation

Page 13: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

13

Singleton-Sample Code[4]نمونه کد

SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS

private void button1_Click(object sender, EventArgs e) { SingleTon S = SingleTon.Getinstance(); SingleTon S2 = SingleTon.Getinstance(); S.Name = “Singleton Pattern”; MessageBox.Show(S2.Name);

}

#C با زبان Singletonنمونه کد الگوی طراحی

نقطه سراسری دسترسی به شی منحصر به فرد

Singleton Patternخروجی :

Page 14: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

14

Singleton-Related Patternsالگو های مرتبط

◦Abstract Factory◦Builder◦Prototype

SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS

Page 15: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

MultitonEXTENSION OF THE SINGLETON PATTERN

Page 16: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

16

Multitonهدف

( key)تضمین وجود تعداد محدودی از نمونه های یک کالس با تعیین یک کلید ◦[5برای هر نمونه و اجازه تنها یک شی برای ایجاد هر کلید. ]

Singletonتوسعه الگوی طراحی Singleton [5]قابلیت گروهی از کالس های ◦

کاربرد [5دوربین امنیتی نیازمند یک شی کنترل کننده ]◦واقعه نگار فایل ها، ایمیل ها، ...◦

SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS

Multiton

-Instance:Dictionary<key,Multiton>

-Multiton()

+GetMultiton(key):Multiton

Multiton [5]ساختار الگوی

Page 17: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

17

Sample Code

SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS

#C با زبان Multitonنمونه کد الگوی طراحی

[5]نمونه کد

public sealed class Camera{

static Dictionary<int, Camera> _cameras = new Dictionary<int, Camera>)(; static object _lock = new object)(; private Camera)( {

HardwareId = Guid.NewGuid)(; }

public static Camera GetCamera)int cameraCode( { lock )_lock(

{if )!_cameras.ContainsKey)cameraCode((

_cameras.Add)cameraCode, new Camera)((; } return _cameras]cameraCode[;

} public Guid HardwareId {

get; private set; }

}

Camera cam1a = Camera.GetCamera)1(;Camera cam1b = Camera.GetCamera)1(;Camera cam2a = Camera.GetCamera)2(;Camera cam2b = Camera.GetCamera)2(;Console.WriteLine)cam1a.HardwareId(;Console.WriteLine)cam1b.HardwareId(;Console.WriteLine)cam2a.HardwareId(;Console.WriteLine)cam2b.HardwareId(; /* OUTPUT 86f5983c-08ed-483a-1e79-26557c4bd4e186f5983c-08ed-483a-1e79-26557c4bd4e18a8b1350-3b11-432c-916e-4e5f8aea70ac8a8b1350-3b11-432c-916e-4e5f8aea70ac */

Page 18: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

Chain of ResponsibilityBEHAVIORAL PATTERN

Page 19: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

19

Chain of Responsibility-Intentهدف

جلوگیری از اتصال بین درخواست کننده و دریافت کننده درخواست، به وسیله ◦[ 1]فرصت دادن به بیش از یک شی برای رسیدگی به درخواست.

آغاز و پایان درخواست ها با یک خط لوله پردازشی که شامل تعدادی گرداننده ◦[ 3است. ]

[ 3یک لیست پیوندی شی گرا با پیمایش بازگشتی. ]◦این الگو تماما در مورد ارتباط بین اشیاء در زنجیره ای از آگاه سازی ها است. ◦

[2]

SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS

Page 20: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

20

Chain of Responsibility-Motivation (1)انگیزش

C# [5]مدیریت استثناءها در زبان برنامه نویسی ◦[4( ]vending machineدستگاه فروش خودکار )◦

SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS

Page 21: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

21

Chain of Responsibility-Motivation (2)انگیزش

درخواست از میان زنجیره ای از اشیاء عبور می کند تا زمانی که یکی از آن ها ◦پاسخ نیاز او را بدهد.

SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS

درخواست کاربر

موجودیت پردازشی

موجودیت پردازشی

موجودیت پردازشی

موجودیت پردازشی

[3]کپسوله کردن موجودیت های پردازش گر درون خط لوله انتزاعی

Page 22: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

22

Chain of Responsibility-Applicabilityکاربرد

[1]رسیدگی به یک درخواست با بیش از یک شی امکان پذیر باشد. ◦[ 1پاسخ دهنده به درخواست باید به صورت خودکار مشخص شود. ]◦بخواهیم یک درخواست را به یکی از چندین شی بدون مشخص کردن صریح ◦

[ 1گیرنده، بفرستیم. ]الزام پویا بودن مجموعه ای از اشیاء که می توانند یک درخواست را مدیریت ◦

[ 1کنند. ]

SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS

Page 23: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

23

Chain of Responsibility-Structureساختار

SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS

ConcreteHandler1

HandleRequest()

Client Handler

HandleRequest()

successor

ConcreteHandler2

HandleRequest()

Chain of Responsibility-Structure [1]ساختار الگوی

Page 24: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

28

Chain of Responsibility-Participantsاجزاء Handler

تعریف واسط کاربری برای رسیدگی به درخواست◦ )اختیاری(پیاده سازی پیوند جانشین◦

ConcreteHandlerدسترسی به جانشین◦پاسخ بIه درخواست در صورت امکان در غیر این صورت فرستادن درخواست به جانشین ◦

خود Client

(ConcreteHandlerفرستادن درخواست به اولین شی زنجیره )◦

SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS

Page 25: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

29

Chain of Responsibility-Collaborationsهمکاران

زمانی که یک کاربر درخواستی را صادر می کند، درخواست روی زنجیره منتشر ◦به آن پاسخ دهد. ConcreteHandlerمی شود تا زمانی که یک شی

SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS

Page 26: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

30

Chain of Responsibility-Consequencesپیامدها

کاهش پیوستگی بین درخواست دهنده و شی ای که پاسخ درخواست را می دهد◦افزایش انعطاف در تخصیص مسئولیت ها به اشیاء◦تضمینی برای دریافت پاسخ وجود ندارد◦نیازمند دقت زیاد در تعیین جانشین◦

Broken Chainمشکل ◦

SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS

Page 27: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

31

Chain of Responsibility-Implementationپیاده سازی چالش های پیاده سازی

پیاده سازی جانشین زنجیر◦اتصال جانشین ها◦توصیف درخواست ها◦

SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS

Page 28: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

32

Chain of Responsibility-Sample Code[5]دستگاه فروش خودکار با سکه

ورودی دستگاه یک سکه◦وظیفه دستگاه تعیین مقدار سکه با توجه به وزن و قطر آن◦

SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS

public class Coin {

public float Weight { get; set; } public float Diameter { get; set; }

}

Page 29: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

33

Chain of Responsibility-Sample CodeHandlerکالس

SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS

public abstract class CoinHandlerBase {

protected CoinHandlerBase _successor;public abstract void HandleCoin)Coin coin(;public void SetSuccessor)CoinHandlerBase successor({

_successor = successor; }

}

Page 30: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

34

Chain of Responsibility-Sample CodeConcreteHandlerکالس های

SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS

public class FivePenceHandler : CoinHandlerBase{

public override void HandleCoin)Coin coin({

if )Math.Abs)coin.Weight - 3.25( < 0.02 && Math.Abs)coin.Diameter - 18( < 0.1(Console.WriteLine)"Captured 5p"(;

else if )_successor != null(_successor.HandleCoin)coin(;

}}

public class TwentyPenceHandler : CoinHandlerBase { …. }public class FiftyPenceHandler : CoinHandlerBase { …. }

public class OnePoundHandler : CoinHandlerBase { …. }

public class TenPenceHandler : CoinHandlerBase { …. }

Page 31: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

35

Chain of Responsibility-Sample CodeClient کالس

SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS

CoinHandlerBase h5 = new FivePenceHandler)(;CoinHandlerBase h10 = new TenPenceHandler)(;CoinHandlerBase h20 = new TwentyPenceHandler)(;CoinHandlerBase h50 = new FiftyPenceHandler)(;CoinHandlerBase h100 = new OnePoundHandler)(;h5.SetSuccessor)h10(;h10.SetSuccessor)h20(;h20.SetSuccessor)h50(;h50.SetSuccessor)h100(;Coin tenPence = new Coin { Diameter = 24.49F, Weight = 6.5F };Coin fiftyPence = new Coin { Diameter = 27.31F, Weight = 8.01F };Coin counterfeitPound = new Coin { Diameter = 22.5F, Weight = 9F };h5.HandleCoin)tenPence(;h5.HandleCoin)fiftyPence(;h5.HandleCoin)counterfeitPound(;

/* OUTPUT Captured 10pCaptured 50p*/

Page 32: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

36

Chain of Responsibility-Related Patternsالگوهای مرتبط

◦Composite

SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS

Page 33: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

با تشکر از توجه شما

Me Other Students Teacher

Page 34: بررسی الگوهای طراحی Singleton  و Chain of Responsibility

مراجع [1] E. Gamma, R. Helm, R. Johnson, and J. Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley

[2] Steve Holzner Ph.D., Design Patterns For Dummies, Design Patterns For Dummies

[3] https://sourcemaking.com/design_patterns

[4] http://www.oodesign.com

[5] http://www.blackwasp.co.uk/DesignPatternsArticles.aspx