`
gary0416
  • 浏览: 331350 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Factory模式

阅读更多

提供创建对象的接口。

可以做一些初始化工作等,尤其是在对象的关系比较复杂的情况下,好处更加明显。

工厂模式一般与单例模式配合使用。

工厂模式分为两种:工厂方法(Factory Method),抽象工厂(Abstract Factory)。

 

工厂方法

FactoryMethod.java

package com.gary.designpattern.factory.factorymethod;

import com.gary.designpattern.factory.obj.Obj;
import com.gary.designpattern.factory.obj.ObjA;
import com.gary.designpattern.factory.obj.ObjB;

/**
 * 工厂方法
 * @author gary
 *
 */
public class FactoryMethod {
	
	public Obj createObj(String ObjName){
		if("ObjA".equals(ObjName)){
			return new ObjA();
		}else if("ObjB".equals(ObjName)){
			return new ObjB();
		}else{
			return null;
		}
	}

}

 

Test.java

 

package com.gary.designpattern.factory.factorymethod;

import com.gary.designpattern.factory.obj.Obj;

/**
 * 测试
 * @author gary
 *
 */
public class Test {
	public static void main(String[] args) {
		FactoryMethod factory = new FactoryMethod();
		Obj oa = factory.createObj("ObjA");
		oa.hello();
		
		Obj ob = factory.createObj("ObjB");
		ob.hello();
	}
}

 

 

抽象工厂

Factory.java

package com.gary.designpattern.factory.abstractfactory;

import com.gary.designpattern.factory.obj.Obj;

/**
 * 抽象工厂,用来产生Obj对象,适用于较复杂情况
 * @author gary
 *
 */
public abstract class Factory {
	
	public abstract Obj createObj();

}

 

AbstractFactoryA.java

package com.gary.designpattern.factory.abstractfactory;

import com.gary.designpattern.factory.obj.Obj;
import com.gary.designpattern.factory.obj.ObjA;

/**
 * 工厂A用来产生ObjA
 * @author gary
 * 
 */
public class AbstractFactoryA extends Factory{

	@Override
	public Obj createObj() {
		return new ObjA();
	}

}

 

AbstractFactoryB.java

package com.gary.designpattern.factory.abstractfactory;

import com.gary.designpattern.factory.obj.Obj;
import com.gary.designpattern.factory.obj.ObjB;

/**
 * 工厂B用来产生ObjB
 * @author gary
 *
 */
public class AbstractFactoryB extends Factory{

	@Override
	public Obj createObj() {
		return new ObjB();
	}

}

 

 

Test.java

package com.gary.designpattern.factory.abstractfactory;

import com.gary.designpattern.factory.obj.Obj;

/**
 * 测试
 * @author gary
 *
 */
public class Test {
	
	public static void main(String[] args) {
		AbstractFactoryA factoryA = new AbstractFactoryA();
		Obj oa = factoryA.createObj();
		oa.hello();
		
		AbstractFactoryB factoryB = new AbstractFactoryB();
		Obj ob = factoryB.createObj();
		ob.hello();
	}
}

 

 

公用Obj

package com.gary.designpattern.factory.obj;

public interface Obj {
	public void hello();
}

 

package com.gary.designpattern.factory.obj;

public class ObjA implements Obj {

	@Override
	public void hello() {
		System.out.println("Hello!This is ObjA.");
	}

}

 

package com.gary.designpattern.factory.obj;

public class ObjB implements Obj {

	@Override
	public void hello() {
		System.out.println("Hello!This is ObjB.");
	}

}

 

1
3
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics