设计模式--行为模式--NULL Object--Java
来源:互联网 发布:控制usb hub端口 编辑:程序博客网 时间:2024/05/21 06:37
NULL OBJECT Patterns
第一次发现此模式时,是由于Bob大叔的经典著作《Agile Principles, Patterns, and Practices In C#》!
下面是出自书中的例子作为引例:
Employee e = DB.GetEmployee("Bob"); if (e != null && e.IsTimeToPay(today)) e.Pay();通过这个小小的例子会发现每次都得在条件中判断e!=null。
1、代码重复。
2、代码丑陋。
3、容易漏写。
解决方式:
Employee e = DB.GetEmployee("Bob");if (e.IsTimeToPay(today)) e.Pay();
public abstract class Employee{ public abstract bool IsTimeToPay(DateTime time); public abstract void Pay(); public static readonly Employee NULL = new NullEmployee(); private class NullEmployee : Employee { public override bool IsTimeToPay(DateTime time) { return false; } public override void Pay(){ } }}
连连看
下面举出一个较为实际的例子:
// present game itemfor (int i = 0; i < world.getRow(); i++) {for (int j = 0; j < world.getCol(); j++) {game.getGraphics().drawPixmap(world.getItem(i, j),j * world.getItemSize(),i * world.getItemSize());}}此局部代码主要为绘制练练看元素。
world.getRow 获取连连看矩阵行数
world.getCol 获取连连看矩阵列数
world.getItem 获取连连看制定位置的Image
其中getItem代码:
public Pixmap getItem(int i, int j) {switch (datas[i][j]) {case 1:return Assets.a;case 2:return Assets.b;case 3:return Assets.c;case 4:return Assets.d;case 5:return Assets.e;case 6:return Assets.f;case 7:return Assets.g;case 8:return Assets.h;case 9:return Assets.i;case 10:return Assets.j;}return Assets.NULL;}
资源加载代码:
Assets.a = g.newPixmap("a.png", PixmapFormat.ARGB8888);Assets.b = g.newPixmap("b.png", PixmapFormat.ARGB8888);Assets.c = g.newPixmap("c.png", PixmapFormat.ARGB8888);Assets.d = g.newPixmap("d.png", PixmapFormat.ARGB8888);Assets.e = g.newPixmap("e.png", PixmapFormat.ARGB8888);Assets.f = g.newPixmap("f.png", PixmapFormat.ARGB8888);Assets.g = g.newPixmap("g.png", PixmapFormat.ARGB8888);Assets.h = g.newPixmap("h.png", PixmapFormat.ARGB8888);Assets.i = g.newPixmap("i.png", PixmapFormat.ARGB8888);Assets.j = g.newPixmap("j.png", PixmapFormat.ARGB8888);Assets.NULL = new AndroidPixmap(Bitmap.createBitmap(40, 40,Config.ARGB_8888), PixmapFormat.ARGB8888);
通过使用NULL OBJECT 模式,在绘制时根本不用考虑获取的连连看元素的图片是否为null,使得代码更清晰更优美,另一方面使得渲染职责不必知道我要绘制的元素是否合法,符合OO的封装思想。
在此我们使用了一个透明的连连看元素作为“NULL OBJECT”。
- 设计模式--行为模式--NULL Object--Java
- 【设计模式攻略】行为型模式之Null Object模式
- Null Object 设计模式
- Null Object设计模式
- Object Null 设计模式
- [设计模式]null object模式
- 【设计模式】--NULL OBJECT 模式
- 使用Null Object设计模式
- Java 空对象设计模式(Null Object Pattern) 讲解
- 设计模式--行为模式--状态模式--Java
- 设计模式--行为模式--策略模式--Java
- Java设计模式之行为模式
- JAVA设计模式 —行为模式总结
- 设计模式--行为模式--Collecting Parameter--Java
- java设计模式之行为型模式
- Java 设计模式 行为型模式 + 案例
- java设计模式之行为模型模式
- java设计模式-行为型模式
- 善于拜访是另一种经营智慧
- 打造新老员工双赢机制变对立为统一
- Linux 设备驱动--- 内核等待队列 --- wait_queue_head --- wait_event_interruptible --- 按键驱动程序优化
- 企业如何避免用错人
- Ubuntu 环境变量及 ADB 配置
- 设计模式--行为模式--NULL Object--Java
- 工作中使用的sql以及finereport报表工具
- Plugins_nrpe.sh
- List of freely available programming books
- 技術以外的
- ubuntu10.04共享目录设置-----samba
- 快速解决"is marked as crashed and should be repaired"故障以及is marked as crashed and last (automatic?)
- iOS 6版本与之前版本差异总结
- Jenkins 安装与配置