设计模式head first学习

设计模式head first学习

最近看了设计模式head first第一章,很有收获,对于我这种不常用模式的人来说,java才是最适合理解模式的语言

Ducker里面组合了,FlyBehavor QuackBehavor两个接口
其他的类通过实现这两个接口去实现具体的功能。
而ducker的派生类通过多态去使用这两个接口的派生类。

说到java的单继承,我想起了一个问题,一个人是父亲和母亲的孩子,他继承了两个人的特征,在java里面怎么表示?恐怕只能使用组合了。逻辑上的概念和实际上的概念差异性不可避免。用c++我就可以公开继承了。

package design_partner;

interface QuackBehavor{
    public void quack();
}
interface FlyBehavor{
    public void fly();
}
abstract class Ducker{
    protected QuackBehavor quackBehavor ;
    protected FlyBehavor flyBehavor ;
    abstract void showDucker();
    public void setQuackBehavor(QuackBehavor quackBehavor){
        this.quackBehavor = quackBehavor;
    }
    public void setFlyBehavor(FlyBehavor flyBehavor){
        this.flyBehavor = flyBehavor;
    }
    public void PerformFly(){
        flyBehavor.fly();
    }
    public void PerformQuack(){
        quackBehavor.quack();
    }
}
class FlyWithWings implements FlyBehavor{
    public void fly(){
        System.out.println("fly with wings");
    }
}
class FlyNoWay implements FlyBehavor{
    public void  fly() {
        System.out.println("fly no way");
    }
}

class Quack implements QuackBehavor{
    public void quack(){
        System.out.println("quack !");
    }
}
class MuteQuack implements QuackBehavor{
    public void quack(){
        System.out.println("mutequack!");
    }
}

class ModelDuck extends Ducker {
    public ModelDuck(){
        this.flyBehavor = new FlyNoWay();
        this.quackBehavor = new Quack();
    }
    public void showDucker(){
        System.out.println("modelduck!");
    }
}

public class StrategyPattern {
    public static void main(String argvs[]){
        System.out.println("start");
        ModelDuck modelDuck = new ModelDuck();
        modelDuck.showDucker();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值