一、概念:
简单工厂模式,就是一个应用声明了Factory对象,然后传入参数,Factory根据参数判断决定返回那个子类对象。
这些子类通常具有共同的父类和共同的方法,但是不同的类执行的任务个不相同。
二、示例模型:
下面是James W.Cooper著的《Java Design Patterns A Tutorial》举的一个经典例子,支持“Jerome Cen”和"Cen,Jerome"姓名格式输入和计算输出的程序:
三、重点解析示例:
其
中 Namer为Public的基类。FirstLast用String类的lastIndexOf("
"),substring()方法给first,last赋值。LastFirst用String类的IndexOf("
,"),substring()方法给first,last赋值。NamerFactory用:
public class NamerFactory {
//Factory decides which class to return based on
//presence of a comma
public Namer getNamer(String entry) {
//comma determines name order
int i = entry.indexOf(",");
if (i > 0)
return new LastFirst(entry);
else
return new FirstFirst(entry);
}
}
其关键就在NamerFactory中用了 int i = entry.indexOf(",");做了判断(根据参数及初始化基类的数据成员),用来决定返回的子类对象类型。
在
Person类中因为为一个基于AWT的支持输入和计算输出的组件,在Button
compute组件中注册了compute.AddActionListener(this);然后可以直接写public void
actionPerformed(ActionEvent e){
//用e.getSource==compute时,然后调用computeName()方法
}
private void computeName() {
namer = nfactory.getNamer (entryField.getText());//工厂模式用工厂类参数判断返回的子类,而模型类作为子类的基类和工厂类的属性(聚合关系)。
txFirstName.setText(namer.getFirst ());//模型基类中声明的方法。
txLastName.setText(namer.getLast ());
}
实际上对用户屏蔽了具体调用的子类,在Simple Factory处为用户提供了统一的接口,得到基类的对象,用对象调用基类方法实现要求。
所以在学习J2SE API时提供不同类型参数的类,可以其实现就是由具体子类实现的,当然也能是类本身实现的。
分享到:
相关推荐
简单工厂模式的实质是由一个工厂类根据传入的参量,动态决定应该创建出哪一个产品类的实例。简单工厂模式实际上不属于23个GoF模式,但它可以作为GoF的工厂方法模式(Factory Method)的一个引导。 UML: ...
java设计模式 简单工厂模式详解 simple factory static pattern
1、简单工厂模式(Simple Factory)又叫做 静态工厂方法模式(Static Factory Method) 2、工厂方法模式(Factory Method)又叫做 多态性工厂模式(Polymorphic Factory) 3、抽象工厂模式(Abstract Factory)又叫做 工具...
工厂模式是我们最常用的模式了,著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。 为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成...
简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式。简单工厂模式是由一个工厂对象决定创建出那一种产品类的实例。 1.工厂模式的几种形态 工厂模式专门负责将大量有共同接口的类实例化...
所以很少存在简单重复的工作,加上Java 代码的精炼性和面向对象纯洁性(设计模式是 java 的灵魂),编程工作将变成一个让你时刻 体验创造快感的激动人心的过程. 为能和大家能共同探讨"设计模式",我将自己在学习中的心得...
简单工厂模式是属于创建型模式,又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单...
Abstract Factory , Builder , Factory Method , Multiton , Pool , Prototype , Simple Factory , Singleton , Static Factory , Structural , Adapter / Wrapper , Bridge , Composite, Data Mapper , Decorator ,...
28、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。 public class ThreadTest1{ private int j; public static ...
超级有影响力的Java面试题大全文档 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。...
1. Introduction to Zend Framework 1.1. 概述 1.2. 安装 2. Zend_Acl 2.1. 简介 2.1.1. 关于资源(Resource) 2.1.2. 关于角色(Role) 2.1.3. 创建访问控制列表(ACL) 2.1.4. 注册角色(Role) 2.1.5. 定义访问...