Bird.java
package HuntBird;public abstract class Bird {protected swim s;protected fly f;//注入实现类接口对象public void setSwim(swim s) {this.s=s;}public void setFly(fly f) {this.f=f;}public abstract void show();
}canFly.java
package HuntBird;public class canFly implements fly{public void showFly() {System.out.print("能展翅高飞!");}
}canSwim.java
package HuntBird;public class canSwim implements swim{public void showSwim() {System.out.print("能游的很快");}}
Client.java
package HuntBird;import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;public class Client {public static void main(String[] args) {List<Bird> bird=new ArrayList<Bird>();bird.add(new gezi());bird.add(new laoying());bird.add(new qie());while(true) {System.out.println("\n"+"请输入你要测试的鸟儿:1代表鸽子,2代表老鹰,3代表企鹅");Scanner scanner=new Scanner(System.in);int i=scanner.nextInt();bird.get(i-1).show();}}
}
fly.java
package HuntBird;public interface fly {public abstract void showFly();}
gezi.java
package HuntBird;public class gezi extends Bird{public void show() {setFly(new canFly());setSwim(new noSwim());System.out.print("鸽子");s.showSwim();System.out.println(" ");f.showFly();}}
Laoyin.java
package HuntBird;public class laoying extends Bird{public void show() {setFly(new canFly());setSwim(new noSwim());System.out.print("老鹰");s.showSwim();System.out.println(" ");f.showFly();}}
noFly.java
package HuntBird;public class noFly implements fly{public void showFly() {System.out.print("不能飞!");}}
noSwim.java
package HuntBird;public class noSwim implements swim{public void showSwim() {System.out.print("不会游泳");}}Qie.java
package HuntBird;public class qie extends Bird{public void show() {setFly(new noFly());setSwim(new canSwim());System.out.print("企鹅");s.showSwim();System.out.println(" ");f.showFly();}}
Swim.java
package HuntBird;public interface swim {public abstract void showSwim();}

优点:

(1)分离抽象接口及其实现部分。桥接模式使用“对象间的关联关系”解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度来变化。所谓抽象和实现沿着各自维度的变化,也就是说抽象和实现不再在同一个继承层次结构中,而是“子类化”它们,使它们各自都具有自己的子类,以便任何组合子类,从而获得多维度组合对象。

(2)在很多情况下,桥接模式可以取代多层继承方案,多层继承方案违背了“单一职责原则”,复用性较差,且类的个数非常多,桥接模式是比多层继承方案更好的解决方法,它极大减少了子类的个数。

(3)桥接模式提高了系统的可扩展性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统,符合“开闭原则”。

缺点:

(1)桥接模式的使用会增加系统的理解与设计难度,由于关联关系建立在抽象层,要求开发者一开始就针对抽象层进行设计与编程。

(2)桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围具有一定的局限性,如何正确识别两个独立维度也需要一定的经验积累。

在HuntBird游戏中,需要模拟不同鸟的多种行为,鸟类中提供了对其各种行为信息进行显示的show()方法,目前游戏需要呈现的是鸽子和企鹅的飞和游泳行为,现使用桥接模式设计该游戏相关推荐

  1. qt中如何模拟按钮点击_qt – 在Windows中模拟鼠标按钮单击

    这是在C#中,但可能会帮助您了解一下: [DllImport("user32.dll",CharSet=CharSet.Auto,CallingConvention=Calling ...

  2. .netframework游戏编程入门——模拟魔兽学院永远的羁绊

    相信有很多和我一样摸索着编游戏的自学者,自学是辛苦的,一没明确的引导,二没正确的工具,我就谈一下自己的经验,也许可以让你少走一点弯路.3D 的先不谈,2D作为基础还是有必要研究,然后把地图模型一换(换 ...

  3. 设计模式 之 桥接模式 //依旧是游戏中的例子来解释设计模式

    桥接模式(Bridge)//此系列的文章仅用于个人笔记整理所用,欢迎各位大佬帮忙指正,鞠躬 什么是桥接模式/桥接模式有什么用? 桥接模式(Bridge)是一种,让多个同类型的类与多个另外的同类型的类相 ...

  4. python在软件测试中的应用_探索Python在数据库测试中的应用

    Python(派森)语言是一种面向对象的用途非常广泛的编程语言,具有非常清晰的语法特点,适用于多种操作系统,可以在Windows和Unix这样的系统中运行.目前在国际上非常流行,正在得到越来越多的应用 ...

  5. Java黑皮书课后题第10章:**10.7(游戏:ATM机)使用编程练习题9.7中创建的Account类来模拟一台ATM级

    **10.7(游戏:ATM机)使用编程练习题9.7中创建的Account类来模拟一台ATM级 题目 程序 代码 Test7.java Test7_Account.java 运行示例 题目 程序 Tes ...

  6. 编写函数模拟掷骰子的游戏(两个骰子)。第一次掷的时候,如果点数之和为7或11则获胜;如果点数之和为2、3或12则落败;其他情况下的点数之和称为“目标”,游戏继续。在后续的投掷中,如果玩家再次掷出“目标

    编写函数模拟掷骰子的游戏(两个骰子).第一次掷的时候,如果点数之和为7或11则获胜:如果点数之和为2.3或12则落败:其他情况下的点数之和称为"目标",游戏继续.在后续的投掷中,如 ...

  7. 在VC中实现模拟键盘,输入内容并显示在ListBox中。

    网上找的,还没试过,希望对楼主有帮助 模拟键盘按键 自动输入文字 键盘对于每个操作电脑的人员来说是最熟悉不过的了.键盘上的按键可分为两类: 按下后会在电脑的输入窗口上出现对应字符的按键,如字母键和数字 ...

  8. .net session 有效时间_Python中requests模拟登录的三种方式(携带cookie/session进行请求网站)...

    这篇文章主要介绍了python中requests模拟登录的三种方式(携带cookie/session进行请求网站),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋 ...

  9. 原来这才是游戏上瘾的机制 如果把它用到生活中的话

    因为所有游戏的设计都是冲着"人性的弱点"来的. 1.即时反馈 你在游戏中的任何操作,都会立马视觉化.数据化地显示出来. 不要小看每次砍怪物头上飚出的数字,不要小看出招的音效,不要小 ...

最新文章

  1. Linu20180415三周第三次课(4月4日)
  2. Jquery动画效果--地铁站名指示等效果
  3. :未来5-10年,NLP将走向成熟
  4. 服务中添加mysql服务_Windows平台下在服务中添加MySQL
  5. python_线程、进程和协程
  6. 联想成立数据智能事业部,前京东蓝烨回归;华为或已向多国知识产权组织提交「鸿蒙」商标申请……...
  7. 在写代码过程中遇到的问题,以及当时的解决方法(如实记录)
  8. spring组键扫描
  9. Stackops快速部署手册
  10. 基于51单片机的带方位指示的自行车码表proteus仿真原理图PCB
  11. Xcode6以后如何用企业证书发布应用
  12. https证书格式转换(cer转bks)
  13. 视打击微软 力挺国产红旗Linux
  14. RT-Thread学习笔记(9):邮箱
  15. 已入职今日头条!并附上8面面经
  16. 沃尔玛积极助农,2月全国范围直采滞销蔬菜近500吨
  17. python 处理xls
  18. 上海海洋大学计算机考研资料汇总
  19. 你从未见过的,最全微服务架构实战详解,干货满满!
  20. MySql的复合主键和联合主键的介绍

热门文章

  1. 斑马888-tt条码打印开发
  2. CAD遇到显示驱动程序文件(.hdi)已丢失或损坏的解决办法
  3. 签证上的mult是什么意思_申根签证如何读懂
  4. 封神英雄榜java_封神英雄榜云霄仙子
  5. moldflow2017安装教程
  6. 10年前的《武林外传》
  7. go mysql dns_golang实现dns域名解析(一)
  8. windows 10 WSL:Ubuntu 18.04 + xrdp
  9. 派森诺基因云:从柱形图到圆柱图
  10. 优化版本 穿越火线(CF) FPS AI 自瞄 代码 权重 数据集(下面有链接)