快速业务通道

在Java中应用Factory Method设计模式 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23

具体实施

先说明一点,用Factory Method模式创建对象并不一定会让我们的代码更短,实事上往往更长,我们也使用了更多的类,真正的目的在于这样可以灵活的,有弹性的创建不确定的对象。而且,代码的可重用性提高了,客户端的应用简化了,客户程序的代码会大大减少,变的更具可读性。

标准实现: 这里我采用Bruce Eckel 用来描述OO思想的经典例子 Shape。这样大家会比较熟悉一些。我完全按照图1中所定义的结构写了下面的一段演示代码。这段代码的作用是创建不同的Shape实例,每个实例完成两个操作:draw和erase。具体的创建过程委托?ShapeFactory来完成。

1.a 首先定义一个抽象类Shape,定义两个抽象的方法。

abstract class Shape { // 勾画shape public abstract void draw(); // 擦去 shape public abstract void erase(); public String name; public Shape(String aName) { name = aName; } } 1.b 定义 Shape的两个子类: Circle, Square,实现Shape中定义的抽象方法 // 圆形子类 class Circle extends Shape { public void draw() { System.out.println("It will draw a circle."); } public void erase() { System.out.println("It will erase a circle."); } // 构造函数 public Circle(String aName) { super(aName); } } // 方形子类 class Square extends Shape { public void draw() { System.out.println("It will draw a square."); } public void erase() { System.out.println("It will erase a square."); } // 构造函数 public Square(String aName) { super(aName); } }

在Java中应用Factory Method设计模式(4)

时间:2010-09-13

1.c 定义抽象的创建器,anOperation调用factoryMethod创建一个对象,并对该对象进行一系列操作。

abstract class ShapeFactory { protected abstract Shape factoryMethod(String aName); // 在anOperation中定义Shape的一系列行为 public void anOperation(String aName) { Shape s = factoryMethod(aName); System.out.println ("The current shape is: " + s.name); s.draw(); s.erase(); } }

1.d 定义与circle和square相对应的两个具体创建器CircleFactory,SquareFactory,实现父类的methodFactory方法

// 定义返回 circle 实例的 CircleFactory class CircleFactory extends ShapeFactory { // 重载factoryMethod方法,返回Circle对象 protected Shape factoryMethod(String aName) { return new Circle(aName + " (created by CircleFactory)"); } }

// 定义返回 Square

实例的 SquareFactory

class SquareFactory extends ShapeFactory { // 重载factoryMethod方法,返回Square对象 protected Shape factoryMethod(String aName) { return new Square (aName + " (created by SquareFactory)"); } }

1.e 测试类:请注意这个客户端程序多么简洁,既没有罗嗦的条件判断语句,也无需关心ConcreteProduct和ConcreteCreator的细节(因为这里我用anOperation封装了Product里的两个方法,所以连Product的影子也没看见,当然把Product里方法的具体调用放到客户程序中也是不错的)。

class Main { public static void main(String[] args) { ShapeFactory sf1 = new SquareFactory(); ShapeFactory sf2 = new CircleFactory(); sf1.anOperation("Shape one"); sf2.anOperation("Shape two"); } }

运行结果如下:

The current shape is: Shape one (created by SquareFactory) It will draw a square. It will erase a square. The current shape is: Shape two (cre

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号