بررسی الگوهای طراحی singleton و chain of responsibility
TRANSCRIPT
بررسی الگو های طراحیSingleton و Chain of
Responsibilityسروش صالحی
مهندسی نرم افزار پیشرفته
SingletonCREATIONAL PATTERN
3
Singleton-Intentهدف
اطمینان از وجود تنها یک نمونه از یک کالس و نقطه دسترسی سراسری به آن ◦[1]نمونه.
[2اطمینان از وجود تنها یک نمونه بدون توجه به میزان تعداد ساخت نمونه.]◦
SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS
4
Singleton-Motivationانگیزش
از آن کالس اهمیت دارد.تنها یک نمونه برای برخی از کالس ها داشتن ◦در یک سیستم چندین چاپگر داریم اما تنها به یک صف چاپگر نیاز داریم.◦برای هر سیستم عامل تنها یک سیستم فایل داریم.◦تنها یک نشانگر موس در سیستم نیاز داریم.◦
راه حل مسئولیت بررسی منحصر به فرد بودن نمونه را به عهده خود کالس بگذاریم.◦کالس می تواند با جلوگیری از درخواست ساخت نمونه جدید مطمئن شود نمونه دیگری ◦
ساخته نشود.کالس باید راهی برای دسترسی به نمونه ارائه دهد.◦
SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS
5
Singleton-Applicabilityکاربرد استفاده می شود که:Singletonزمانی از الگوی
باید دقیقا یک نمونه از کالس داشته باشیم و این نمونه توسط کاربرانI دسترس پIذیر باشد ◦[1]
یک نمونه منحصر به فرد باید توسط زیر کالس توسعه بپذیرد و کاربران بدون تغییر ◦[1کدشان به نمونه توسعه یافته دسترسی داشته باشند ]
[2محدودیت استفاده از منابع ]◦[2محدودیت دسترسی به شی حساس )مهم( توسط چندین نمونه ]◦[2اشتراک داده بین اشیاء ]◦[4( ]loggerکالس واقعه نگار )◦[ 4کالس پیکربندی تنظیمات یک برنامه ]◦
SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS
6
Singleton-Structureساختار
Singleton
Static Instance()
SingletonOperation()
GetSingletonData()
Static uniqueInstance
SingletonData
Return uniqueInstance
SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS
Singleton [1]ساختار الگوی
7
Singleton-Structureساختار
Singleton
-Instance:Singleton
-Singleton()
+Static Instance():Singleton
SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS
Singleton [3]ساختار الگوی
Client
8
Singleton-Participantsشرکت کنندگان
مسئول ساخت نمونه یکتای خودش استSingletonکالس ◦یک تابع برای دسترسی کاربر به نمونه منحصر به فرد◦
SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS
9
Singleton-Collaborationsهمکاران
از طریق یک تابع دسترسی دارند.singletonکاربران به نمونه منحصر به فرد ◦
SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS
10
Singleton-Consequencesپیامدها
کنترل دسترسی به نمونه منحصر به فردکاهش فضای ناممجوز پاالیش عملیات و نمایشمجوز تعداد متغیر از نمونه هامنعطف تر نسبت به عملیات کالس
SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS
11
Singleton-Implementationپیاده سازی چالش های پیاده سازی الگو:
تضمین یک نمونه یکتا◦ در سیستم های چند نخیSingletonاستفاده ◦Singletonارث بری از کالس ◦
SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS
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
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خروجی :
14
Singleton-Related Patternsالگو های مرتبط
◦Abstract Factory◦Builder◦Prototype
SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS
MultitonEXTENSION OF THE SINGLETON PATTERN
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]ساختار الگوی
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 */
Chain of ResponsibilityBEHAVIORAL PATTERN
19
Chain of Responsibility-Intentهدف
جلوگیری از اتصال بین درخواست کننده و دریافت کننده درخواست، به وسیله ◦[ 1]فرصت دادن به بیش از یک شی برای رسیدگی به درخواست.
آغاز و پایان درخواست ها با یک خط لوله پردازشی که شامل تعدادی گرداننده ◦[ 3است. ]
[ 3یک لیست پیوندی شی گرا با پیمایش بازگشتی. ]◦این الگو تماما در مورد ارتباط بین اشیاء در زنجیره ای از آگاه سازی ها است. ◦
[2]
SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS
20
Chain of Responsibility-Motivation (1)انگیزش
C# [5]مدیریت استثناءها در زبان برنامه نویسی ◦[4( ]vending machineدستگاه فروش خودکار )◦
SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS
21
Chain of Responsibility-Motivation (2)انگیزش
درخواست از میان زنجیره ای از اشیاء عبور می کند تا زمانی که یکی از آن ها ◦پاسخ نیاز او را بدهد.
SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS
درخواست کاربر
موجودیت پردازشی
موجودیت پردازشی
موجودیت پردازشی
موجودیت پردازشی
[3]کپسوله کردن موجودیت های پردازش گر درون خط لوله انتزاعی
22
Chain of Responsibility-Applicabilityکاربرد
[1]رسیدگی به یک درخواست با بیش از یک شی امکان پذیر باشد. ◦[ 1پاسخ دهنده به درخواست باید به صورت خودکار مشخص شود. ]◦بخواهیم یک درخواست را به یکی از چندین شی بدون مشخص کردن صریح ◦
[ 1گیرنده، بفرستیم. ]الزام پویا بودن مجموعه ای از اشیاء که می توانند یک درخواست را مدیریت ◦
[ 1کنند. ]
SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS
23
Chain of Responsibility-Structureساختار
SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS
ConcreteHandler1
HandleRequest()
Client Handler
HandleRequest()
successor
ConcreteHandler2
HandleRequest()
Chain of Responsibility-Structure [1]ساختار الگوی
28
Chain of Responsibility-Participantsاجزاء Handler
تعریف واسط کاربری برای رسیدگی به درخواست◦ )اختیاری(پیاده سازی پیوند جانشین◦
ConcreteHandlerدسترسی به جانشین◦پاسخ بIه درخواست در صورت امکان در غیر این صورت فرستادن درخواست به جانشین ◦
خود Client
(ConcreteHandlerفرستادن درخواست به اولین شی زنجیره )◦
SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS
29
Chain of Responsibility-Collaborationsهمکاران
زمانی که یک کاربر درخواستی را صادر می کند، درخواست روی زنجیره منتشر ◦به آن پاسخ دهد. ConcreteHandlerمی شود تا زمانی که یک شی
SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS
30
Chain of Responsibility-Consequencesپیامدها
کاهش پیوستگی بین درخواست دهنده و شی ای که پاسخ درخواست را می دهد◦افزایش انعطاف در تخصیص مسئولیت ها به اشیاء◦تضمینی برای دریافت پاسخ وجود ندارد◦نیازمند دقت زیاد در تعیین جانشین◦
Broken Chainمشکل ◦
SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS
31
Chain of Responsibility-Implementationپیاده سازی چالش های پیاده سازی
پیاده سازی جانشین زنجیر◦اتصال جانشین ها◦توصیف درخواست ها◦
SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS
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; }
}
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; }
}
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 { …. }
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*/
36
Chain of Responsibility-Related Patternsالگوهای مرتبط
◦Composite
SINGLETON & CHAIN OF RESPONSIBILITY DESIGN PATTERNS
با تشکر از توجه شما
Me Other Students Teacher
مراجع [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