`

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

 
阅读更多

概述:

定义一个用于创建对象的接口,让子类决定实例化哪一个类。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>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics