`

工厂方法

DAO 
阅读更多

 

FactoryMethod是一种创建性模式,它定义了一个创建对象的接口,但是却让子类来决定具体实例化哪一个类.当一个类无法预料要创建哪种类的对象或是一个类需要由子类来指定创建的对象时我们就需要用到Factory Method 模式了.简单说来,Factory Method可以根据不同的条件产生不同的实例,当然这些不同的实例通常是属于相同的类型,具有共同的父类.Factory Method把创建这些实例的具体过程封装起来了,简化了客户端的应用,也改善了程序的扩展性,使得将来可以做最小的改动就可以加入新的待创建的类. 通常我们将Factory Method作为一种标准的创建对象的方法,当发现需要更多的灵活性的时候,就开始考虑向其它创建型模式转化.

这里举一个例子:

 

//这里也可以采用接口的形式来处理. 对于具体的应用,如Services和DAO层都是这
//样处理的
public abstract class Shape {

	// 勾画shape
	public abstract void draw();

	// 擦去 shape
	public abstract void erase();

	public String name;

	public Shape(String aName) {
		name = aName;
	}
	public Shape() {
	}
}

 

package factory.method.abs;//圆形
public class Circle extends Shape {

	public Circle(String name) {
		super(name);
	}

	public Circle() {
	}

	@Override
	public void draw() {
		System.out.println(name + " Circle is draw ..... ");

	}

	@Override
	public void erase() {
		System.out.println(name + " Circle is erase ..... ");

	}

}

 

package factory.method.abs;//方形
public class Square extends Shape {

	public Square(String name) {
		super(name);
	}

	public Square() {
	}

	@Override
	public void draw() {
		System.out.println(name + " Square is draw ..... ");

	}

	@Override
	public void erase() {

		System.out.println(name + " Square is erase ..... ");
	}

}

 

 

package factory.method.abs;

/**
 * 工厂 注工厂实例最是是设置成单例的(但这里没做处理)
 */
public  class ShapeFactory {

	/**
	 * 这是一种实现方式,直接通过传 入的类型来判断是创建哪一种类型的创建具体的实例对象
	 * @param aName
	 * @param aType
	 * @return
	 * @throws NoThisShape
	 */
	public static Shape factoryMethod(String aName, String aType) throws NoThisShape{
	    if (aType.compareTo("square")==0)
	      return new Square(aName);
	    else if (aType.compareTo("circle")==0)
	      return new Circle(aName);
	    else throw new NoThisShape(aType);  
	  }
	
	private static Shape s;

	private ShapeFactory(){}
	
	// 在anOperation中定义Shape的一系列行为
	 public  static void anOperation(String aName, String aType) throws NoThisShape{
	    s = factoryMethod(aName, aType);
	    System.out.println("The current shape is: " + s.name);
	    s.draw();
	    s.erase();
	  }
	
}
 

 

package factory.method.abs;
public class NoThisShape extends Exception {
	private static final long serialVersionUID = 743755614709478922L;

	public NoThisShape(String aName) {
		super(aName);
	}

}

 

 

package factory.method.abs;

public class MainApp {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		    
	    try {
			ShapeFactory.anOperation("Shape one","circle");
			ShapeFactory.anOperation("Shape two","square");
			ShapeFactory.anOperation("Shape three", "delta");//没有这种类型的工厂类
		} catch (NoThisShape e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
 

 

 

 

分享到:
评论

相关推荐

    工厂模式:简单工厂模式、工厂方法模式、抽象工厂模式

    工厂模式分为三种主要类型:简单工厂模式、工厂方法模式和抽象工厂模式。 1. **简单工厂模式** 简单工厂模式是最简单的工厂模式实现,它提供一个静态方法或者类来创建对象,这个类通常被称为“工厂”。用户只需要...

    简单工厂模式-工厂方法模式-抽象工厂模式

    在软件设计模式中,工厂模式是一组非常基础且实用的设计模式,主要分为简单工厂模式、工厂方法模式和抽象工厂模式。这些模式都是为了解决对象创建的问题,通过封装对象的创建过程,使得代码更加灵活,易于扩展和维护...

    工厂方法模式和抽象工厂模式的区别

    工厂方法模式和抽象工厂模式是两种常见的设计模式,它们都属于创建型模式,用于解决对象的创建问题。在软件设计中,这两种模式都是用来隔离对象的创建和使用,以提高系统的灵活性和可扩展性。 首先,工厂方法模式的...

    简单工厂-工厂方法-抽象工厂 对比总结

    本篇文章将对三种主要的工厂模式:简单工厂、工厂方法和抽象工厂进行深入的对比和总结。 **简单工厂模式** 是最基础的工厂模式形式,它提供一个静态方法或类来创建对象。在这个模式中,工厂是负责创建对象的中心...

    工厂方法模式的C语言实现

    工厂方法模式是一种设计模式,属于创建型模式,它提供了一种创建对象的最佳方式。在工厂方法模式中,当我们创建对象时,不会直接实例化具体的产品类,而是通过一个工厂类来创建。这样做的好处是,当需要添加新的产品...

    软件设计之工厂方法模式,源代码

    ### 软件设计之工厂方法模式解析及Java实现 #### 一、工厂方法模式概述 工厂方法模式(Factory Method Pattern)是一种常用的面向对象设计模式,属于创建型模式之一。它提供了一种创建对象的最佳方式。在工厂方法...

    工厂方法模式uml类图

    java设计模式 工厂方法模式uml类图,一张图就让你秒懂工厂方法模式

    设计模式-工厂方法模式

    工厂方法模式是设计模式中的创建型模式,它提供了一种创建对象的最佳方式。在这个模式中,一个类(称为工厂类)不再直接实例化具体的产品,而是定义一个接口或抽象类,由子类来决定实例化哪一个类。这样做的好处在于...

    用工厂方法模式重构简易计算器 源代码+实验报告

    《工厂方法模式在简易计算器重构中的应用》 在软件工程中,设计模式是解决常见问题的模板,它们为程序员提供了一种标准化的解决方案。工厂方法模式(Factory Method Pattern)是面向对象设计模式的一种,它在实际...

    设计模式之工厂方法

    这个接口就是工厂方法,让子类决定实例化哪一个类,工厂方法让类的实例化推迟到子类。 在Java编程中,工厂方法模式通常涉及到以下几个关键角色: 1. 抽象产品(Abstract Product):这是产品的抽象接口,定义了产品...

    工厂方法模式代码示例

    工厂方法模式是一种面向对象的设计模式,属于创建型模式,它提供了一种创建对象的最佳方式。在工厂方法模式中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为模式。 工厂方法模式的核心思想是...

    工厂方法模式源代码

    工厂方法模式(Factory Method Pattern)是设计模式中的创建型模式之一,它定义了一个创建对象的接口,但允许子类决定实例化哪一个类。这个模式使类的实例化延迟到了子类,也就是所谓的“多态性工厂”。在Java中,...

    工厂方法模式Demo

    工厂方法模式是一种面向对象的设计模式,属于创建型模式,它提供了一种创建对象的最佳方式。在工厂方法模式中,一个工厂类负责创建所关心的对象,而客户端代码则使用这些对象,而不必知道对象是如何被创建的。这种...

    工厂方法模式源文件

    工厂方法模式是面向对象设计模式中的行为模式,它属于创建型模式的一种,主要解决的是当一个类不知道它所必须创建的对象的类的时候,或者当一个类希望由它的子类来决定实例化哪个类的时候,如何封装这个实例化过程的...

    设计模式之工厂方法、简单工厂、抽象工厂

    工厂方法、简单工厂和抽象工厂是创建型设计模式的三种不同形式,它们都关注于对象的创建过程,但各有其特点和适用场景。 1. **工厂方法(Factory Method)**: 工厂方法模式定义了一个创建对象的接口,但让子类...

    java工厂方法模式

    Java工厂方法模式 Java工厂方法模式是一种创建型模式,它属于类的创建型模式。该模式的主要思想是,父类负责定义创建对象的公共接口,而子类则负责生成具体的对象。这样做的目的是将类的实例化操作延迟到子类中完成...

    工厂方法应用实例源码

    工厂方法(Factory Method)和抽象工厂方法(Abstract Factory Method)是两种常见的设计模式,尤其在Java编程中被广泛应用。这个"工厂方法应用实例源码"展示了如何在实际项目中使用这两种设计模式来实现一个馅饼店...

    工厂方法模式[C#]

    工厂方法模式是设计模式中的一种创建型模式,它在面向对象编程中扮演着重要的角色。在C#中,我们可以利用这种模式来抽象产品的创建过程,将具体的实例化操作延迟到子类中进行,从而实现代码的解耦和扩展性。 1. **...

    工厂方法模式应用案例

    工厂方法模式是面向对象设计模式中的行为模式之一,它提供了一种创建对象的最佳方式。在工厂方法模式中,我们创建对象时不直接实例化具体的产品,而是通过一个抽象工厂类来调用具体工厂子类的方法来生成对应的具体...

    抽象工厂,工厂方法,简单工厂

    在软件设计模式中,"抽象工厂"、"工厂方法"和"简单工厂"都是创建型设计模式,它们都用于封装对象的创建过程,提供了一种间接的途径来创建对象,从而使得代码更加灵活,易于扩展。下面将详细介绍这三个工厂模式。 ##...

Global site tag (gtag.js) - Google Analytics