一、概念:在Simple Factory基础上做了扩展,
1.不再直接由Factory做判断生成业务基类类型的子类对象(引用不同的子类),而是将判断推迟到Factory的子类中完成;2.但是生成的业务基类类型对象将一样调用自己已声明的方法实现功能,模型类也将从中获取子类处理结果后显示结果。
二、
示例:游泳选手的比赛中,分为预赛和决赛。规则是预赛先按照报名的以前最好成绩排序,假如有40人参赛,一场比赛的泳道为8个,预赛有5场。成绩最好的3
位将排在最后三场的中间赛道,最后一场的中间赛道是最强的(假如为菲尔普斯),向上递减;紧随其后的3名选手将被安排在最后三场的紧靠中间的赛道,其它赛
道的安排以此类推。这样就安排了24为选手,还剩下的16名则按决赛排序。(详看游泳比赛赛道安排规则)。Factory Method的UML类图:
三、重点代码解析:其它类已经指明了关系,下面就主程序了说明下:
package create.factory.factorymethod;
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.*;
public class showSeeding extends JxFrame //JxFrame类为继承了Frame类的简单类,代码看后面。
implements ListSelectionListener {
JawtList evList, swList;
//JawtList extends JScrollPane implements ListSelectionListener, awtList,此处不详解,主要是可以滚动,增添项的列表。
Vector events;
public showSeeding() {
super("Factory Method Seeding");
events = new Vector();
JPanel jp = new JPanel();
getContentPane().add(jp);
jp.setLayout(new GridLayout(1,2)); //框架类和布局类的聚合关系
evList = new JawtList(20);//JawList
swList = new JawtList(20);
jp.add(evList);
jp.add(swList);
evList.addListSelectionListener(this);
events.addElement(new TimedFinalEvent("500free.txt", 6));/
/在此处调用了调用了创建子类,返回具体对象。
evList.add("500 Free");
events.addElement(new PrelimEvent("100free.txt", 6));
evList.add("100 Free");
setSize(new
Dimension
(300,200));/
/encapsulates the width and height of a component (in integer precision) in a single object
setVisible(true);
}
//-----------------------------------------
public void
valueChanged(ListSelectionEvent e)
//在ListSelectionListener里面的方法,当值改变时会由关联关系调用
。
{
swList.clear();
int index = evList.getSelectedIndex();
System.out.println("index="+index);
Event ev = (Event)events.elementAt(index);
Seeding sd = ev.getSeeding();
Enumeration enum1 =sd.getSwimmers();
while(enum1.hasMoreElements())
{
Swimmer sw = (Swimmer)enum1.nextElement();
swList.add(sw.getHeat()+" "+sw.getLane()+" "+sw.getName()+" "+sw.getTime());
}
}
//----------------------------------------
static public void main(String argv[]) {
new showSeeding();
}
}
/****JxFrame类**/
public class JxFrame extends JFrame
{
public JxFrame(String title)
{
super(title);
setCloseClick();
setLF();
}
private void setCloseClick()
{
//create window listener to respond to window close click
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e) {System.exit(0);}
});
}
//------------------------------------------
private void setLF()
{
// Force SwingApp to come up in the System L&F
String laf = UIManager.getSystemLookAndFeelClassName();
//UIManager类返回the String
of the LookAndFeel
class
try {
UIManager.setLookAndFeel(laf);
/*装载Loads the LookAndFeel
specified by the given class name, using the current thread's context class loader, and passes it to setLookAndFeel(LookAndFeel)
.
*/
}
catch (UnsupportedLookAndFeelException exc)
{System.err.println("Warning: UnsupportedLookAndFeel: " + laf);}
catch (Exception exc) {System.err.println("Error loading " + laf + ": " + exc);
}
}
}
四、总结:
1.
何时使用工厂模式:
(1)类无法预计出必须创建那个类的对象(由事件激发)。
(2)类要使用其子类指定所要创建的对象(将判断下移到工厂子类中)。
(3)对于将创建那个类,希望将有关信息局部化(读入相同的信息或方法名输出不一样的结果或提供不一样的功能)。
2.工厂模式有几种不同的形式:
(1)基类是抽象类,并且这种模式必须返回一个完全可工作的类(决策点在抽象类)。
(2)基类中包含默认的方法,并且只有当默认的方法不够用时,才需要派生子类。
(3)传递给工厂的参数将通知要返回那些类类型,这种情况下,所有的了必须有相同的方法名,但是每个方法可完成完全不同的操作。
分享到:
相关推荐
Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)
Factory Method Pattern 工厂三兄弟之工厂方法模式(一) 工厂三兄弟之工厂方法模式(二) 工厂三兄弟之工厂方法模式(三) 工厂三兄弟之工厂方法模式(四) 抽象工厂模式-Abstract Factory Pattern 工厂三兄弟之...
2. 工厂方法模式(Factory Method) 3. 抽象工厂模式(Abstract Factory) 这三种模式从上到下逐步抽象,并且更具一般性。还有一种分类法,就是将简单工厂模式看为工厂方法模式的一种特例,两个归为一类。下面是使用...
JAVA设计模式-day2,请的行业大能讲得课程,涉及:创建模式(5种: 1、 工厂方法模式(Factory Method); 2、 抽象工厂模式; 3、 单例模式(Singleton) • 4、 建造者模式(Builder); 5、 原型模式(Prototype...
- 工厂方法模式(Factory Method) - 抽象工厂模式(Abstract Factory) - 单例模式(Singleton) - 建造者模式(Builder) - 原型模式(Prototype) - 代理模式(Proxy) - 适配器模式(Adapter) - 装饰器模式(Decorator...
pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象工厂模式 pattern/src/creation/singleton //11.3单例模式 pattern/src/creation/builder //11.4建造者...
各个设计模式的介绍,非常不错 Java与设计模式 设计模式之Factory -工厂模式设计模式之FACTORY METHOD -工厂模式設計模式之Builder -建造模式
从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂...
GOF在《设计模式》一书中将工厂模式分为两类:工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory)。将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例,两者归为一类。 两者皆可,在...
在设计模式中,FactoryMethod也是比较简单的一个,但应用非常广泛,EJB,RMI,COM,CORBA,Swing中都可以看到此模式的影子,它是最重要的模式之一.在很多地方我们都会看到xxxFactory这样命名的类,那么,什么是FactoryMethod,...
第16章 工厂方法(factory method)模式 141 第17章 抽象工厂(abstract factory)模式 148 第18章 原型(prototype)模式 158 第19章 备忘录(memento)模式 163 第20章 操作型模式介绍 176 第21章 模板方法(template ...
设计模式 t02FactoryMethod
FactoryMethod ( 工厂方法 ) Singleton ( 单态模式 ) Builder ( 建造者模式 ) Prototype ( 原型模式 ) Adapter ( 适配器模式 ) Bridge ( 桥接模式 ) Composite ( 组合模式 ) Decorator ( 装饰模式 ) Facade ...
5、工厂方法模式FACTORY METHOD PATTERN 6、抽象工厂模式ABSTRACT FACTORY PATTERN 7、门面模式FACADE PATTERN 8、适配器模式ADAPTER PATTERN 9、模板方法模式TEMPLATE METHOD PATTERN 10、建造者模式BUILDER ...
采用工厂方法(Factory Method)设计模式,设计并实现一个多用能计算器。要求如下: ① 画出类图,定义每个类的属性和方法,并分析类之间的关系。 ② 实现多用能计算器,分别实现数值型(标量、向量和矩阵)计算、非...
java的设计模式大体上分为三大类: 2 设计模式遵循的原则有6个: 2 1. 工厂模式(Factory Method) 2 2. 抽象工厂模式(Abstract Factory) 3 3. 单例模式(Singleton) 4 4.建造者模式(Builder) 4 5. 原型模式...
适合Java设计模式期末考试选择题复习,形式如下: 10.(单选题)Facade(外观)模式的意图是 正确答案: A A.希望简化现有系统的使用方法...工厂方法模式(Factory Method) C.适配器模式(Adapter) D.单例模式(Singleton)
工厂模式中有: 工厂方法(Factory Method) 抽象工厂(Abstract Factory). 这两个模式区别在于需要创建对象的复杂程度上。如果我们创建对象的方法变得复杂了,如上面工厂方法中是创建一个对象Sample,如果我们还有新的...
1.工厂方法模式(Factory Method) 将程序中创建对象的操作,单独出来处理,创建一个产品的工厂接口,把实际的工作转移到具体的子类。大大提高了系统扩展的柔性,接口的抽象化处理给相互依赖的对象创建提供了最好的...