c#

位置:IT落伍者 >> c# >> 浏览文章

设计模式与VB .net代码 外观模式,合成模式


发布日期:2018年07月18日
 
设计模式与VB .net代码 外观模式,合成模式

外观模式

就是将一大堆功能合并成一个接口提供给客户代码

比如一个Window类用户就不需要手工编写很多创建窗体的代码 这就是外观模式

其实很多模式我们在编写代码时就在使用只不过没这么称呼而已也提醒我看模式书籍时尽量不要太关注模式的名称

例如我们可以将错误处理封装在一个类中:

Public Class ErrorManage

Public Shared Sub RecordError( _

ByVal errorMsg As String _

ByVal errType As ErrorType _

Optional ByVal isWriteNote As Boolean = False)

End Sub

Enum ErrorType

warning

wrong

suggest

End Enum

End Class

客户代码: ErrorManageRecordError(some description ErrorManageErrorTypesuggest False)

这就是外观模式Perry觉得有点儿唬人

以前函数可以看做外观模式的一种但在VB Net中是用类来组织代码因此我们一般说这个类使用了外观模式其实是指这个类是一个服务类提供一些静态成员给客户代码使用而已而这些静态成员将客户端需要许多步骤才能完成的工作简化了

此外观和程序的外观完全没关系这个模式不是教我们做UI的

Perry觉得唬人不是对外观模式的轻视而是自己先被模式吓到了模式可以让我们在编写程序时更清晰更有把握交流起来也明确

合成模式

简单来说一个类中能包含自身的集合就叫合成模式常见的如目录下有目录和文件

树是合成模式的其中的一种抽象

合成模式有一个前提:

其中的被包含对象要和包含对象有一个公共接口

一棵简单的树: Public Interface ComponentInterface

Function Parent() As ComponentInterface

Function Children() As ComponentInterface()

Function IsHaeChildren() As Boolean

End Interface

Public Class Components

Implements ComponentInterface

Public Function Children() As ComponentInterface() Implements ComponentInterfaceChildren

End Function

Public Function IsHaeChildren() As Boolean Implements ComponentInterfaceIsHaeChildren

End Function

Public Function Parent() As ComponentInterface Implements ComponentInterfaceParent

End Function

End Class

Public Class Component

Implements ComponentInterface

Public Function Children() As ComponentInterface() Implements ComponentInterfaceChildren

End Function

Public Function IsHaeChildren() As Boolean Implements ComponentInterfaceIsHaeChildren

Return False

End Function

Public Function Parent() As ComponentInterface Implements ComponentInterfaceParent

End Function

End Class

开始Perry始终不明白为什么要一个公共接口?

那是因为客户代码在操作时需要有一致性需要遍历这些没有公共接口就不能实现

比如:目录可以复制剪切也可以打开下一级回到上一级

它也规范了合成模式是同接口对象的合成而不同对象聚合在一起?可以用前面的外观模式来解释或者后面还有对应的模式呢?

树只是合成模式的一种简单表示复杂些的有图如何用合成模式表示图或者说如何遍历图需要看<<数据结构>>

合成模式典型应用在结构(物料BOM)流程性质管理(过程节点)

上一篇:C# 3.0中的分部方法

下一篇:C#中的HMACSHA1类