概述:
定义一个用于创建对象的接口,让子类决定实例化哪一个类。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>
分享到:
相关推荐
工厂方法模式是创建型设计模式的一种,它提供了一种创建对象的最佳方式。 ### 一、什么是工厂方法模式? 工厂方法模式定义了一个创建对象的接口,但让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其...
创建型模式主要关注对象的创建过程,例如单例模式(Singleton)、工厂方法模式(Factory Method)和抽象工厂模式(Abstract Factory)。单例模式确保一个类只有一个实例,并提供全局访问点;工厂方法模式则允许子类...
1. **工厂方法**(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 2. **抽象工厂**(Abstract Factory):提供一个创建一系列相关或相互依赖...
3. 工厂方法(Factory Method)模式:工厂方法定义了一个创建对象的接口,让子类决定实例化哪个类。这样,类的实例化可以在运行时决定,增加了系统的灵活性。 4. 原型(Prototype)模式:原型模式通过复制已有对象...
2. 工厂方法模式(Factory Method): Factory Method模式是一种创建型模式,它定义一个用于创建对象的接口,让子类决定实例化哪一个类。这样,工厂方法就把类的实例化推迟到子类中进行,增强了系统的灵活性和扩展性...
### 设计模式复习笔记大全 #### 一、设计模式概览 **设计模式**是一种用于在特定场景下解决常见设计问题的方案。它通常描述了一组相互作用的类和对象,以及这些对象如何通信来解决问题。设计模式的核心要素包括...
在这个“设计模式之美”的学习笔记中,我们将探讨一些主要的设计模式,以及它们在实际开发中的应用。 首先,我们从创建型模式开始。这类模式主要用于对象的创建,如单例模式(Singleton)、工厂模式(Factory ...
7. **工厂方法(Factory Method)模式**:工厂方法模式定义一个创建对象的接口,让子类决定实例化哪一个类。它将对象的创建过程延迟到子类中,提高了系统的可扩展性。在C#中,它用于当类的实例化需要依赖于具体环境...
创建型模式如单例(Singleton)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)等,关注对象的创建过程,使得代码更加灵活且易于维护。结构型模式如适配器(Adapter)、装饰器(Decorator)和代理...
主要分为五种:工厂方法(Factory Method)、抽象工厂(Abstract Factory)、单例(Singleton)、建造者\Builder、原型\(Prototype\)。例如,工厂方法允许在子类中定义实例化对象的具体过程,而单例模式确保一个类只有一个...
创建型模式关注对象的创建,如单例模式(Singleton)、工厂方法模式(Factory Method)和抽象工厂模式(Abstract Factory)。结构型模式涉及如何组合类和对象,比如适配器模式(Adapter)、装饰器模式(Decorator)...
- 创建型模式:如单例(Singleton)、工厂方法(Factory Method)、抽象工厂(Abstract Factory)、建造者(Builder)和原型(Prototype)。它们主要关注对象的创建过程,使得代码更加灵活,易于扩展。 - 结构型...
- 工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。 - 抽象工厂模式(Abstract Factory):提供一个接口,用于创建相关或依赖对象的家族,而无需指定具体类。 - 建造者...
1. 创建型模式:如单例模式(Singleton)、工厂模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)和原型模式(Prototype)。这些模式关注对象的创建,旨在降低对象的创建过程与使用...
- **创建型模式**:如单例(Singleton)、工厂方法(Factory Method)、抽象工厂(Abstract Factory)、建造者(Builder)和原型(Prototype),它们主要关注对象的创建过程。 - **结构型模式**:如适配器...
- **工厂方法模式**(Factory Method):定义一个创建对象的接口,但让子类决定实例化哪一个类。 - **抽象工厂模式**(Abstract Factory):提供一个接口,用于创建相关或依赖对象的族,而无需指定它们具体的类。 ...
1. **创建型模式**(Creational Patterns):这类模式关注对象的创建过程,包括单例模式(Singleton)、工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)和原型模式...
创建型模式如单例(Singleton)、工厂方法(Factory Method)和建造者(Builder)等,关注对象的创建过程,确保在复杂环境中能正确并高效地创建对象。结构型模式如适配器(Adapter)、装饰器(Decorator)和代理...
工厂方法模式是设计模式中的创建型模式之一,它通过提供一个创建一系列相关或相互依赖对象的接口,但允许子类决定实例化哪一个类。 - **角色与结构** - **抽象工厂** (`Creator`): 声明了创建产品的接口。 - **...
本笔记主要讲述了设计模式的基本概念和应用,包括 Iterator 模式、Adapter 模式、TemplateMethod 模式、FactoryMethod 模式和 Singleton 模式等。通过对这些设计模式的详细解释和示例代码的分析,我们可以更好地理解...