设计模式:组合

背景:实现不同种群鸭子的一些行为,有会飞的,有不会飞的,有会叫的,又不会叫的。在多用组合,少用继承的前提下。进行编码。“有一个“可能比“是一个”更好,由此可得,抽象类,看视为一个类,而接口,看作是这个类的‘行为’

将飞行和叫两个行为定义为两个接口,接口有一些不同的实现行为, 然后让抽象 Duck去实现这些接口。实体类Duck实现抽象类。这样,就为不同实体赋予了不同方法。

public abstract class Duck {
    abstract void display();
}
public interface FlyBehavior {
     void fly();
}
public class FlyNoWays implements FlyBehavior {
    public void fly() {
        System.out.println("can not fly");
    }
}
public class FlyWithWings implements FlyBehavior {

    public void fly() {
        System.out.println("Fly With Wings");
    }
}
public interface QuackBehavior {
    void quack();
}
public class MuteQuack implements QuackBehavior {

    public void quack() {
        System.out.println("I cant not quack");
    }
}
public class DuckModel extends Duck {
    FlyBehavior flyBehavior = new FlyNoWays();
    QuackBehavior quackBehavior = new MuteQuack();

    void display() {
        System.out.println("I am beautify");
    }
}

以上,不将fly 和 quack 定义为duck自有的属性,而是将其定义为外界赋予它的属性。

可随时变化。(面向接口编程)

转载于:https://my.oschina.net/marjeylee/blog/806643

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值