工厂方法

定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类。

Purpose

Exposes a method for creating objects, allowing subclasses to control the actual creation process. 

Use When

A class will not know what classes it will be required to create.

Subclasses may specify what objects should be created. 

Parent classes wish to defer creation to their subclasses.

工厂方法

Product: 定义工厂方法所创建的对象的接口

ConcreteProduct:实现Product接口

Creator:声明工厂方法,该方法返回一个Product类型的对象

ConcreteCreator: 重定义工厂方法以返回一个ConcreteProduct实例


一个抽象产品类,可以派生出多个具体产品类

一个抽象工厂类,可以派生出多个具体工厂类

每个具体工厂类只能创建一个具体产品类的实例

工厂方法是针对每一种产品提供一个工厂类。通过不同的工厂实例来创建不同的产品实例。在同一等级结构中,支持增加任意产品。

工厂方法

接口product

public interface Product {
	public void brand();
}

接口FactoryMethod

public interface FactoryMethod {
	public Product createProduct();
}

两个产品ConcreateProductA与ConcreateProductB的实现

public class ConcreateProductA implements Product {
	public void brand() {
		System.out.println("ConcreateProductA");
	}
}

public class ConcreateProductB implements Product{
	public void brand() {
		System.out.println("ConcreateProductB");
	}
}

两个工厂类ConcreateFactoryA与ConcreateFactoryB的实现

public class ConcreateFactoryA implements FactoryMethod{

	public Product createProduct() {
		return new ConcreateProductA();
	}

}

public class ConcreateFactoryB implements FactoryMethod{
	public Product createProduct() {
		return new ConcreateProductB();
	}
}

客户端的调用

public class Client {

	public static void main(String[]args){
		FactoryMethod brand1=new ConcreateFactoryA();
		brand1.createProduct().brand();
		
		FactoryMethod brand2=new ConcreateFactoryB();
		brand2.createProduct().brand();
		
	}
}


参考:http://blog.csdn.net/superbeck/article/details/4446177


你可能感兴趣的:(java,工厂方法)