设计模式(2)-创建型-工厂方法(Factory method)(个人笔记)

来源:互联网 发布:淘宝销量第一的店铺 编辑:程序博客网 时间:2024/05/19 20:20

概述:

定义一个用于创建对象的接口,让子类决定实例化哪一个类。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()只由具体的工厂类的最终类型决定。

<script type="text/javascript"><!--google_ad_client = "ca-pub-7104628658411459";/* wide1 */google_ad_slot = "8564482570";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>