Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1332884
  • 博文数量: 185
  • 博客积分: 50
  • 博客等级: 民兵
  • 技术积分: 3934
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-11 13:11
个人简介

iihero@ChinaUnix, ehero.[iihero] 数据库技术的痴迷爱好者. 您可以通过iihero AT qq.com联系到我 以下是我的三本图书: Sybase ASE in Action, Oracle Spatial及OCI高级编程, Java2网络协议内幕

文章分类

全部博文(185)

文章存档

2014年(4)

2013年(181)

分类: 项目管理

2013-07-23 09:50:47

概述:


定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类。
适用性:



 1.当一个类不知道它所必须创建的对象的类的时候。

 2.当一个类希望由它的子类来指定它所创建的对象的时候。

 3.当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
参与者:



    1.Product
      定义工厂方法所创建的对象的接口。

    2.ConcreteProduct
      实现Product接口。

    3.Creator
      声明工厂方法,该方法返回一个Product类型的对象。
      Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象。
      可以调用工厂方法以创建一个Product对象。

    4.ConcreteCreator
      重定义工厂方法以返回一个ConcreteProduct实例。
示例:



package com.sql9.created;

interface Task
{
    public  void doWork();
}

class FactoryBeijingTask implements Task
{
    public void doWork()
    {
        System.out.println("工厂Beijing的任务:生产北京分公司的部件....");
    }
}

class FactoryGuangzhouTask implements Task
{
    public void doWork()
    {
        System.out.println("工厂Guangzhou的任务:生产广州分公司的部件....");
    }
}

interface  ITaskFactory
{
    public Task dispatchTask();
}

class FactoryBeijing implements ITaskFactory
{
    public Task dispatchTask()
    {
        return new FactoryBeijingTask();
    }
}

class FactoryGuangzhou implements ITaskFactory
{
    public Task dispatchTask()
    {
        return new FactoryGuangzhouTask();
    }
}

public class FactoryMethodTest
{

    public static void main(String[] args)
    {
        ITaskFactory taskFactory = new FactoryBeijing();
        taskFactory.dispatchTask().doWork();
        
        taskFactory = new FactoryGuangzhou();
        taskFactory.dispatchTask().doWork();
    }

}



结果:

工厂Beijing的任务:生产北京分公司的部件....
工厂Guangzhou的任务:生产广州分公司的部件....

分析:具体Task要做的doWork()只由具体的工厂类的最终类型决定。

阅读(1899) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~