25-09-17, 11:13 AM
(آخر تعديل لهذه المشاركة : 25-09-17, 11:22 AM {2} بواسطة silverlight.)
فكرة الموضوع تتلخص في تحويل الواجهات Interface الي دوال
حيث يتم اخفاء الكود الحقيقي الذي يقوم بالتنفيذ
وهنا يتم استخدام Interface كبديلا للكلاس الحقيقي الموجود به الكود
كتابة الكود الخاص لأي Interface
ثم نقوم بعمل Implement للواجهة Intereface في اي كلاس
كتابة الكلاس الذي يحتوي علي دوال API
حيث الهدف هنا استدعاء الواجهة Interface عن طريق تمرير الكلاس الأصلي و الموجود به الكود الفعلي
الإستخدام
فقط تستدعي الواجهة Interface
من الممكن دمج الكود الخاص بدوال API و الكلاس StringAccessor ليصبح بالشكل التالي
الكلاس أعلاه يمكن تعميمه عن طريق استخدام Generic
حيث يمكن كتابة الواجهة Interface بالشكل التالي
الإستخدام
أتمني أن تكون الفكرة مفيدة للبعض منكم
تقبلوا تحياتي
حيث يتم اخفاء الكود الحقيقي الذي يقوم بالتنفيذ
وهنا يتم استخدام Interface كبديلا للكلاس الحقيقي الموجود به الكود
كتابة الكود الخاص لأي Interface
PHP كود :
Public Interface IStringAccessor
Function Access() As String
End Interface
ثم نقوم بعمل Implement للواجهة Intereface في اي كلاس
PHP كود :
Friend Class StringAccessor
Implements IStringAccessor
Private value As String
Private accessorFunc As Func(Of String, String)
Public Sub New(value As String, func As Func(Of String, String))
Me.value = value
Me.accessorFunc = func
End Sub
Public Function Access() As String Implements IStringAccessor.Access
Return Me.accessorFunc(Me.value)
End Function
End Class
كتابة الكلاس الذي يحتوي علي دوال API
حيث الهدف هنا استدعاء الواجهة Interface عن طريق تمرير الكلاس الأصلي و الموجود به الكود الفعلي
PHP كود :
Public NotInheritable Class AccessorAPI
Public Shared Function Access(value As String) As IStringAccessor
Return New StringAccessor(value, Function(s) s)
End Function
End Class
الإستخدام
فقط تستدعي الواجهة Interface
PHP كود :
Dim accessor As IStringAccessor = AccessorAPI.Access("Visual Basic")
If accessor IsNot Nothing Then
Me.Text = accessor.Access
End If
من الممكن دمج الكود الخاص بدوال API و الكلاس StringAccessor ليصبح بالشكل التالي
PHP كود :
Public NotInheritable Class AccessorAPI
Public Shared Function Access(value As String) As IStringAccessor
Return New StringAccessor(value, Function(s) s)
End Function
Private Class StringAccessor
Implements IStringAccessor
Private value As String
Private accessorFunc As Func(Of String, String)
Public Sub New(value As String, func As Func(Of String, String))
Me.value = value
Me.accessorFunc = func
End Sub
Public Function Access() As String Implements IStringAccessor.Access
Return Me.accessorFunc(Me.value)
End Function
End Class
End Class
الكلاس أعلاه يمكن تعميمه عن طريق استخدام Generic
حيث يمكن كتابة الواجهة Interface بالشكل التالي
PHP كود :
Public Interface IAccessor(Of T)
Function Access() As T
End Interface
PHP كود :
Public NotInheritable Class Accessor(Of T)
Public Shared Function Access(value As T) As IAccessor(Of T)
Return New InternalAccessor(value, Function(x) x)
End Function
Private Class InternalAccessor
Implements IAccessor(Of T)
Private _value As T
Private _accessor As Func(Of T, T)
Public Sub New(value As T, func As Func(Of T, T))
Me._value = value
Me._accessor = func
End Sub
Public Function Access() As T Implements IAccessor(Of T).Access
Return Me._accessor(Me._value)
End Function
End Class
End Class
الإستخدام
PHP كود :
Dim accessor As IAccessor(Of String) = AccessorAPI.Access("any String")
If accessor IsNot Nothing Then
Me.Text = accessor.Access
End If
أتمني أن تكون الفكرة مفيدة للبعض منكم
تقبلوا تحياتي
Retired