面向接口编程很好的例子

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

参考网址/luckyhare/blog/item/e2de8e5427a2505e574e003d.html
Java 通过Duck类,介绍设计原则_多用组合,少用继承2009-11-03 14:00 设计原则: 针对接口编程 ,而不是实现编程, 多用组合,少用继承

1,定义 QuackBehavior 接口
public interface QuackBehavior //接口 实现鸭子呱呱叫
{
public void quack();
}

2 定义Quack 类
public class Quack implements QuackBehavior //类 Quack 继承接口 ,实现鸭子呱呱,
{
public void quack() //实现接口中的 Quack() 方法
{
System.out.println("呱呱呱, 我是能叫的鸭子");
}
}
3 定义MuteQuack 类
public class MuteQuack implements QuackBehavior //类MuteQuack , 继承接口,
{
public void quack() //实现QuackBehavior接口中的 quack() 方法
{
System.out.println("沉默,我不会想鸭子一样叫");
}
}

4 定义 FlyBehavior 接口
public interface FlyBehavior //接口类型
{
public void fly();
}

5 定义 FlyWithWings 类
public class FlyWithWings implements FlyBehavior
{
public void fly() //实现接口中的 fly() 方法
{
System.out.println("飞起来了,我会飞");
}
}
6 定义 FlyNoWay 类
public class FlyNoWay implements FlyBehavior
{
public void fly() //实现接口中的 fly() 方法
{
System.out.println("我不会飞,呜呜呜!!");
}
}
7 定义 抽象类 Duck 类
public abstract class Duck
{
FlyBehavior flyBehavior ; //接口
QuackBehavior quackBehavior ; //接口

public Duck()
{
}
public abstract void display(); //抽象类

public void performFly()
{
flyBehavior.fly(); //委托给行为类
}
public void performQuack()
{
quackBehavior.quack(); //委托给行为类
}
}
8 定义 MallardDuck 类
public class MallardDuck extends Duck
{
public MallardDuck () //构造函数,实现飞行和鸭叫行为
{
flyBehavior = new FlyWithWings(); //使用多态,
quackBehavior = new Quack(); // 使用多态,
}

public void display() //显示消息
{
System.out.println("我是绿头鸭,我是绿头鸭");
}

public void eat() //觅食
{
System.out.println("我开始吃饭了");
}
}

9 定义 MiniDuckSimulator 类 ,含 main(String[] args) 入口函数

public class MiniDuckSimulator
{
public static void main(String[] args)
{
Duck duckOne = new MallardDuck(); //使用多态

duckOne.performFly();
duckOne.performQuack();
duckOne.display();
//duckOne.eat(); //此语句不能通过编译

if(duckOne instanceof MallardDuck)
{
MallardDuck mallardDuck = (MallardDuck) duckOne; //强制类型转换,将父类型转换位子类型
System.out.println("");
mallardDuck.display();
mallardDuck.eat();
}
}
}


相关文档
最新文档