设计模式--行为模式--NULL Object--Java
2013-03-09 14:12
453 查看
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 item for (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”。
相关文章推荐
- java行为设计模式——MVC模式
- Java设计模式之从[鼠标接口][星际争霸中的兵种行为]分析适配器(Adapter)模式
- Java设计模式_行为模式_观察者模式
- Java设计模式之行为模式
- java行为设计模式——中介者模式
- java 设计模式-行为模式之命令模式
- Java设计模式(20)——行为模式之命令模式(Command)
- java 设计模式-行为模式之迭代者模式
- java设计模式 -------- 行为模式 之 策略模式(4)
- Java设计模式分为创建模式, 结构模式, 行为模式 3种类型
- java 设计模式-行为模式之责任链模式
- Java设计模式之责任链模式的详解(行为模式)
- Java 设计模式之状态模式的详解(行为模式)
- Java设计模式(22)——行为模式之状态模式(State)
- 设计模式--行为模式--迭代模式--Java
- 设计模式--行为模式--状态模式--Java
- Java设计模式(19)——行为模式之责任链模式(chain of responsibilitiy)
- java行为设计模式——模板模式
- 【java设计模式之State(对应每种状态的行为) 】
- Java 设计模式之访问者模式的详解(行为模式)