没想到鹅哥的爱情故事,可以让你学废几个设计模式。

  • 在很久很久以前........(以下故事纯属虚构)
1.模式村的鸭群(拥有可以呱呱呱呱叫的行为)之中出现了一位美若天仙的鸭妹。
2.不太争气的鹅哥(拥有嘎嘎嘎嘎叫的行为),被她迷的神魂颠倒,鹅哥便用法术【1】将自己伪装成一只帅鸭,混入鸭群,接近鸭妹.....
3.一个月过去了,鹅哥成功俘获鸭妹芳心(鹅哥真有一手),他们便私定终身。
4.鹅哥本以为可以就此和鸭妹幸福一生,可鸭妹的主人却发现了此事的蹊跷,只见主人施展一法【2】便让鹅哥现出鹅型。
5.鹅哥鹅身暴露,群鸭震惊,鸭妹大哭跑回房间。鹅哥匆匆逃去......
6.接下来的几天,此鸭鹅倍受“煎熬”,一月的朝夕相处使得他们情深似海(泪目)。
7.鸭妹想了很久,最终还是被鹅哥勇敢追求爱情的行为打动,决定接受鹅哥是鹅的身份。鹅哥也难以控制内心的思念,准备冒险再去见见鸭妹。
8.鸭妹偷偷解掉身上被主人种下的法术,成功和鹅哥幽会几次。
9.可是他们哪能逃出主人的通天法眼,主人这次更是用了一种更厉害的法术【3】,中此法的鸭子无法自己解除。
  同时主人为了防止此类事件再次发生,又设下一种禁制,就算是任何其他的东西伪装成鸭子,都受自己的控制【4】。
  更可怕的是,所有鸭子有任何异动,主人都能立刻发现【5】。
10.主人已设下天罗地网,鹅哥的爱情将何去何从?
  • 法术揭秘,望你习得神功,解救鹅哥
1】适配器模式,鹅哥把自己伪装成鸭子。
【2】装饰者模式,可以增加鸭子行为,伪装的鹅哥没有及时做出反应,暴露。
【3】工厂模式,控制所有鸭子对象。
【4】组合模式,控制所有的对象集合
【5】观察者模式,监视鸭子的动态
  • 相信你已掉下悬崖,这是功法秘籍——design-mode-demo/src/pattern/mixture
  • 代码地址
    在这里插入图片描述
  • 就差最后一层了,你难以领悟,挂来
看代码的时候,特别是用了观察者模式之后,你会发现有很多类,调用关系很复杂,有点难找线索。
建议看看下面的类图,可以帮你理清思路,这里以observer包下的类为例,因为使用了观察者模式之后,几乎每个类都得重写。
  • 代码结构
    在这里插入图片描述
  • 金色传说
    在这里插入图片描述
  • 注意到了没,上面的藏宝图上还有一些密法口诀。不知万中挑一,旷世奇才的你领悟到其中的奥义了吗?(没错,这就是一招从天而降的掌法!)
首先看最基本的接口或者说是顶层的父类:
【1Quackable接口,有一个quack()方法,代表可以呱呱呱叫的物种。
【2QuackObservable接口,有register()notifyObservers()方法。代表被观察者。
【3Observer接口,有一个update()方法,代表观察者。
【4ObservableAbstractDuckFactory抽象类,有3createXxx()方法创建不同品种的鸭子,是一个抽象工厂。
【5】为了让这个呱呱呱叫的物种可以被观察,Quackable接口继承了QuackObservable接口。

现在再看看一些子类:
【1】三个品种的鸭子MallardDuckRedheadDuckRubberDuck。他们实现的了Quackable接口,有了quack()的行为。
	由于Quackable接口继承成了QuackObservable接口,它们也成了被观察者。
【2QuackCounter类是一个装饰者,增加了统计鸭子数量的行为。同时也实现了Quackable接口,有了quack()的同时,也是被观察者。
【3ObservableDuckCounterFactory继承了ObservableAbstractDuckFactory抽象工厂,用于创建QuackCounter对象。
【4Flock也继承了Quackable接口,有quack()行为,同时成为被观察者。自己用了组合模式,内部可以容纳Quackable的对象集合。可以方便管理某一种类型。
	因为List<Quackable>存的是Quackable类型的,不管是Flock本身,还是具体的鸭子,它们都是这个类型。这样就可以将对象集合和对象做统一的处理。
【5Quackologist实现了Observer接口,成为了一个观察者,可以在它想观察的对象中注册,这样被观察者就在“适当的时候”可以通知它做相应的改变。
【6Observable实现了QuackObservable接口,它作为一个辅助类,封装了register()notifyObservers()方法,其他的类在使用的时候,就可以直接使用。而不是重复地实现这两个方法。
  • 走到这一步,你应该已经成功习得绝世神功,你是那个解救这对苦命鹅鸭的英雄吗?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值