创建型模式---工厂方法

创建型模式包括以下5种:

FactoryMethod ( 工厂方法)

AbstractFactory ( 抽象工厂)

Singleton ( 单态模式 )

Builder ( 建造者模式 )

Prototype  原型模式 )

 

设计模式之一: 工厂方法

定义:一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到了其子类。
适用性:
   1> 当客户程序不需要知道要使用对象的创建过程。
   2> 客户程序使用的对象存在变动的可能,或者根本就不知道使用哪一个具体的对象。

 参与者
 1.Product 定义工厂方法所创建的对象的接口。
 2.ConcreteProduct 具体的Product,实现Product接口。
 3.Creator 声明工厂方法,该方法返回一个Product类型的对象。Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象。可以调用工厂方法以创建一个Product对象。
 4.ConcreteCreator 重定义工厂方法以返回一个ConcreteProduct实例。

 

代码如下: 

package keifer.share.creationalPattern.factory.method;

public class FactoryMethodPattern {//Test类
	public static void main(String[] args) {
		IWorkFactory chineseWorkFactory = new ChineseWorkFactory();
		chineseWorkFactory.getwork().work();
		IWorkFactory americanWorkFactory = new AmericanWorkFactory();
		americanWorkFactory.getwork().work();
	}
}

interface IHuman {//所属角色:Product
	public void work();
}

class AmericanPerson implements IHuman {//所属角色:ConcreteProduct
	public void work() {
		System.out.println("美国人在工作。");
	}
}

class ChinesePerson implements IHuman {//所属角色:ConcreteProduct
	public void work() {
		System.out.println("中国人在工作。");
	}
}

interface IWorkFactory {//工厂类接口。所属角色:Creator
	IHuman getwork();
}

class ChineseWorkFactory implements IWorkFactory {//所属角色:ConcreteCreator
	@Override
	public IHuman getwork() {
		return new ChinesePerson();
	}
}

class AmericanWorkFactory implements IWorkFactory {//所属角色:ConcreteCreator
	@Override
	public IHuman getwork() {
		return new AmericanPerson();
	}
}

/**
 运行结果:
 中国人在工作。
 美国人在工作。
*/

 

 

 

 

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