一、概念:在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设计模式是面向对象编程...在阅读《Chapter1___Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)》的相关资料时,你可以更深入地学习这些模式的细节,包括适用场景、优缺点以及如何在实际项目中实现。
今天我们要探讨的是设计模式中的一个经典成员——工厂方法模式(Factory Method Pattern)。工厂方法模式是创建型设计模式的一种,它提供了一种创建对象的最佳方式。 ### 一、什么是工厂方法模式? 工厂方法模式...
工厂方法模式用于创建对象,允许推迟实例化到子类,增强了代码的灵活性。装饰器模式可以在不改变对象接口的情况下,动态地给对象添加新的行为或职责。而代理模式可以用来控制对原对象的访问,比如在访问前进行权限...
在这个压缩包中,`FactoryMethod`可能包含了Java实现工厂方法模式的源代码示例。 设计模式是一种在特定场景下解决软件设计问题的通用、可重用的解决方案,它代表了最佳实践,被广泛应用于各种编程语言中。工厂方法...
学习Java中的工厂方法模式,探索示例、用途、好处以及它如何增强代码的灵活性和可维护性。 **二、别名** * Virtual Constructor **三、Factory Method设计模式的意图** 使用工厂方法模式定义一个用于创建对象的...
Java作为一款强大的面向对象编程语言,非常适合实现各种设计模式,包括工厂方法模式。在这个“工厂方法模式java实例demo”中,我们可以期待看到如何在实际代码中应用这一模式。 在刘伟老师的《设计模式》一书中,他...
工厂方法模式是设计模式中的创建型模式,它提供了一种创建对象的最佳方式。在这个模式中,一个工厂类负责创建对象,而具体的创建过程被延迟到子类中实现。这种模式的关键在于封装了对象的创建过程,并允许在运行时...
创建型模式关注对象的创建,如单例(Singleton)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)。这些模式帮助我们控制实例化过程,使代码更具灵活性和可扩展性。 结构型模式涉及到如何组合类和对象...
2. 工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。 3. 抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。 4. ...
例如,代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法模式(Factory Method Pattern)、抽象工厂模式(Abstract Factory Pattern)、适配器模式(Adapter Pattern)、模板方法模式(Template ...
本资源“设计模式--java版.rar”提供了一种深入理解和应用Java设计模式的方式。 在Java开发中,设计模式主要分为三大类:创建型模式、结构型模式和行为型模式。创建型模式如单例(Singleton)、工厂方法(Factory ...
以上就是Java设计模式的一些基本概念和应用,理解并熟练掌握这些模式对于编写高质量、易于维护的Java代码至关重要。通过阅读《设计模式——Java语言中的应用》这本书,你可以更深入地学习和掌握这些模式的细节及其在...
1. **创建型设计模式**:这类模式主要关注对象的创建过程,如单例模式(Singleton)、工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)和原型模式(Prototype)。...
c) 工厂方法模式(FactoryMethod) 工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。JDK中的例子有: - java.lang.Object#toString(),返回对象的字符串表示。 - java.lang.Class#new...
这个“JAVA设计模式-chm版”资源显然包含了关于Java设计模式的详细信息,便于理解和应用。设计模式是对常见问题的解决方案的标准化描述,它们在软件工程中起到了重要的作用,帮助开发者创建可维护、可扩展且易于理解...
3. 工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。 4. 抽象工厂模式(Abstract Factory):提供一个接口,用于创建相关或依赖对象的家族,而无需指定具体类。 5. 建造者...
Factory Method Pattern 工厂三兄弟之工厂方法模式(一) 工厂三兄弟之工厂方法模式(二) 工厂三兄弟之工厂方法模式(三) 工厂三兄弟之工厂方法模式(四) 抽象工厂模式-Abstract Factory Pattern 工厂三兄弟之...
工厂方法模式(Factory Method)提供了一个接口来创建对象,但允许子类决定实例化哪个类。抽象工厂模式(Abstract Factory)提供了创建相关或依赖对象的家族,而无需指定它们的具体类。建造者模式(Builder)将一个...
**工厂模式**是一种常见的设计模式,它在Java中被广泛应用于创建对象实例。工厂模式的主要目的是将对象的创建过程封装起来,使得代码更加灵活且易于维护。通过使用工厂模式,我们可以将实例化对象的责任从客户端代码...
工厂方法模式(Factory Method Pattern) 工厂方法模式定义了一个用于创建对象的接口,但允许子类决定实例化哪一个类。这使得一个类的实例化延迟到其子类。在Java中,通过工厂方法模式可以实现动态创建对象的功能,...