初学设计模式

今天学第一章设计模式,写一个简单的模拟鸭子应用。有3种鸭子,普通鸭,橡皮鸭,木头鸭。设计一个鸭子超类,让所有的鸭子都继承这个超类。是时候让鸭子能飞了。文中举了一个例子,一个程序员说:“我只要在Duck类中加上fly()方法,然后让所有的鸭子类都继承fly()方法就可以了”。但是可怕的事情发生了,他忽略了一件事:并非所有的鸭子都会飞,他在Duck超类中加上的新行为会使不适合该行为的子类也具有了该行为。后来他想到了继承,但是继承会有一些缺点,代码在多个子类中重复,改动会牵一发动全身,造成其他鸭子不想要的改变。利用接口,把fly()放进一个Flyable接口,只有会飞的鸭子会实现这个方法,同样的方式,也设计一个Quackable会叫的鸭子实现这个方法。可是这样设计也有缺点,让鸭子实现这2个接口可以解决一部分问题,但是会有很多重复代码,如果有很多的子类来实现接口会很麻烦。

把会变化的和不会变化的分开。写2个接口FlyBehavior所有的飞行类都必须继承它,所有的飞行类都必须实现fly()方法,和QuackBehavior所有的叫声类也一样。实现里面的方法。建立2个类FlyWithWings实现鸭子飞行,FlyNoWay什么都不做,不会飞。让它们继承FlyBehavior,鸭子叫声的方法也一样继承QuackBehavior。整合鸭子的行为,鸭子就变的正常了。

还学了动态设定行为,设计一个模型鸭ModelDuck,不会飞也不会叫,但是,给模型鸭加上火箭,使它能飞。在Duck类中加入setFlyBehavior和setQuackBehavior方法,就可以随时改变鸭子的行为。在测试类中,第一次调用模型鸭会打印“我不会飞”然后在调用了serFlyBehavior方法,给鸭子装上了火箭,代码继续向下,再打印一遍模型鸭,显示了“我背着火箭飞了!”

总结:设计模式定义了算法组,分别封装起来,让它们之间可以互相转换,让算法的变化独立于使用算法的客户。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值