Chinaunix首页 | 论坛 | 博客
  • 博客访问: 188241
  • 博文数量: 106
  • 博客积分: 3810
  • 博客等级: 中校
  • 技术积分: 1007
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-18 13:35
文章分类

全部博文(106)

文章存档

2014年(17)

2011年(5)

2010年(75)

2009年(9)

我的朋友

分类: 项目管理

2011-01-20 21:17:08

说有天有人来找,要出去。倒持了半天。完毕,然后出门。

开始还得先看图:

这个的具体实现可以自己试验一下。

后来又去参加一个什么晚会,要求戴墨镜(带上之后发现天真黑。)上面的那个图显然不能用了,再改吧,把抽象的person类改了?no no no。开闭原则不允许我这么做。

为了能够刷一把帅,只有这样了,看图:

这样就好了。又不用违法,又为以后再添加别的装饰物开辟了空间。哈哈,很好呀。

那么好了,开始具体行动吧:

Module Module1
    Sub Main()
        Dim hu As Person
        hu = New huyang
        hu.DressCoat()
        hu.DressTrouser()
        hu.DressShoes()
        '开始装饰
        Console.WriteLine("。。。开始装饰。。。。")
        '定义装饰的对象,以及被装饰的人
        Dim dc As New DecoratorCool(hu)
        dc.DressCoat()
        dc.DressTrouser()
        dc.DressShoes()
        dc.DressCoolly()
        Console.ReadKey()
    End Sub
End Module
'抽象人的基类
Public MustInherit Class Person
    '穿上外套
    MustOverride Sub DressCoat()
    '穿上裤子
    MustOverride Sub DressTrouser()
    '穿上鞋
    MustOverride Sub DressShoes()
End Class
'具体的人
Public Class huyang : Inherits Person
    Public Overrides Sub DressCoat()
        Console.WriteLine("我穿上外套。。。。")
    End Sub
    Public Overrides Sub DressShoes()
        Console.WriteLine("我穿上鞋。。。。。")
    End Sub
    Public Overrides Sub DressTrouser()
        Console.WriteLine("我穿上裤子。。。。")
    End Sub
End Class
'定义装饰类
Public Class Decorator : Inherits Person
    Protected _person As Person
    '通过构造函数传递人,因为不可能只装饰一个人。
    Public Sub New(ByVal person As Person)
        _person = person
    End Sub
    Public Overrides Sub DressCoat()
        _person.DressCoat()
    End Sub
    Public Overrides Sub DressShoes()
        _person.DressShoes()
    End Sub
    Public Overrides Sub DressTrouser()
        _person.DressTrouser()
    End Sub
End Class
'添加酷帅的墨镜效果
Public Class DecoratorCool : Inherits Decorator
    Public Sub New(ByVal person As Person)
        MyBase.new(person)
    End Sub
    Public Overrides Sub DressCoat()
        _person.DressCoat()
    End Sub
    Public Overrides Sub DressShoes()
        _person.DressShoes()
    End Sub
    Public Overrides Sub DressTrouser()
        _person.DressTrouser()
    End Sub
    Public Sub DressCoolly()
        Console.WriteLine("我带上墨镜。。。出门去")
    End Sub
End Class
Module Module1
    Sub Main()
        Dim hu As Person
        hu = New huyang
        hu.DressCoat()
        hu.DressTrouser()
        hu.DressShoes()
        '开始装饰
        Console.WriteLine("。。。开始装饰。。。。")
        '定义装饰的对象,以及被装饰的人
        Dim dc As New DecoratorCool(hu)
        dc.DressCoat()
        dc.DressTrouser()
        dc.DressShoes()
        dc.DressCoolly()
        Console.ReadKey()
    End Sub
End Module
'抽象人的基类
Public MustInherit Class Person
    '穿上外套
    MustOverride Sub DressCoat()
    '穿上裤子
    MustOverride Sub DressTrouser()
    '穿上鞋
    MustOverride Sub DressShoes()
End Class
'具体的人
Public Class huyang : Inherits Person
    Public Overrides Sub DressCoat()
        Console.WriteLine("我穿上外套。。。。")
    End Sub
    Public Overrides Sub DressShoes()
        Console.WriteLine("我穿上鞋。。。。。")
    End Sub
    Public Overrides Sub DressTrouser()
        Console.WriteLine("我穿上裤子。。。。")
    End Sub
End Class
'定义装饰类
Public Class Decorator : Inherits Person
    Protected _person As Person
    '通过构造函数传递人,因为不可能只装饰一个人。
    Public Sub New(ByVal person As Person)
        _person = person
    End Sub
    Public Overrides Sub DressCoat()
        _person.DressCoat()
    End Sub
    Public Overrides Sub DressShoes()
        _person.DressShoes()
    End Sub
    Public Overrides Sub DressTrouser()
        _person.DressTrouser()
    End Sub
End Class
'添加酷帅的墨镜效果
Public Class DecoratorCool : Inherits Decorator
    Public Sub New(ByVal person As Person)
        MyBase.new(person)
    End Sub
    Public Overrides Sub DressCoat()
        _person.DressCoat()
    End Sub
    Public Overrides Sub DressShoes()
        _person.DressShoes()
    End Sub
    Public Overrides Sub DressTrouser()
        _person.DressTrouser()
    End Sub
    Public Sub DressCoolly()
        Console.WriteLine("我带上墨镜。。。出门去")
    End Sub
End Class

'细心的读者可能发现了其中

那么想想我在买药的那会儿是怎么干的:《通过我买西瓜霜来看外观模式(vb.net实现)》

那就自己去实现吧。

不过还得说一说这个装饰模式

先来看定义:

装饰模式(Decorator),动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

GoF《设计模式》中说道:动态的给一个对象添加一些额外的职责。就增加功能而言,Decorator模式比生成子类更为灵活。

关于在《大话》中的那个装饰模式的实现,现在也不是很理解。如果你知道,请提示一二……

阅读(705) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2011-03-07 08:53:08

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com