Hibernate框架设计模式:工厂模式

工厂模式:是一种类创建模型,适用于在创建多个复杂对象的时候(在不同情况下创建不同对象)。

工厂模式一般分为以下两种:

1.简单工厂模式:在工厂类定义创建不同对象实例的方法,在需要使用对象的地方,通过创建工厂并给出需要的对象名称来获取对象实例。

例如:车是一个大类,具体的车对象的父类都是车类,所以设定一个车工厂类,通过不同的车对象名称,创建并获取对应车对象,然后就可以通过具体的车对象调用与之对应的方法。

Car.java:

package com.factory.cls;

public interface Car {

	void run();
}
BMW.java:

package com.factory.cls;

public class BMW implements Car{

	@Override
	public void run() {
		System.out.println("BMW车在跑");
		
	}

}
QQ.java:

package com.factory.cls;

public class QQ implements Car{

	@Override
	public void run() {
		System.out.println("QQ车在跑");
		
	}

}
FactoryCar:车工厂类

package com.factory.cls;

public class FactoryCar{
	
	public Car getCar(String carName) {
	if(carName == null){
		return null;
	}
	if("QQ".equals(carName)){
		return new QQ();
	}else if("BMW".equals(carName)){
		return new BMW();
	}
	return null;
        }
}

测试类:在测试类中创建工厂,通过工厂获取对应名称的车对象,并能够调用车对象的方法。

package com.factory.cls;

public class Test {
	public static void main(String[] args) {
		FactoryCar factory = new FactoryCar();
		Car car = factory.getCar("BMW");
		car.run();

	}

}

2.抽象工厂模式:工厂的工厂。例如:在上面1中Car简单工厂的基础上还有color工厂,在这时,就需要创建一个抽象工厂,用于抽象出根据需求获取对应车对象和获取对应颜色对象的方法,并且还应该有一个工厂创建工具类,用于根据需求创建颜色工厂还是车工厂对象,具体如下:

AbstractFactory.java:抽象工厂

package com.factory.cls;

public abstract class AbstractFactory {
	 abstract Car getCar(String carName);
	 abstract Color getColor(String colorName);
}
FactoryCar.java:车工厂

package com.factory.cls;

public class FactoryCar extends AbstractFactory{

	@Override
	Color getColor(String colorName) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	Car getCar(String carName) {
		if(carName == null){
			return null;
		}
		if("QQ".equals(carName)){
			return new QQ();
		}else if("BMW".equals(carName)){
			return new BMW();
		}
		return null;
	}
}
FactoryColor.java:颜色工厂


package com.factory.cls;

public class FactoryColor extends AbstractFactory{

	@Override
	Car getCar(String carName) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	Color getColor(String colorName) {
		if(colorName == null){
			return null;
		}
		if("blue".equals(colorName)){
			return new Blue();
		}else if("red".equals(colorName)){
			return new Red();
		}
		return null;
	}

	
}
Car.java:

package com.factory.cls;

public interface Car {

	void run();
}
Color.java:

package com.factory.cls;

public interface Color {

	void createColor();
}
QQ.java:

package com.factory.cls;

public class QQ implements Car{

	@Override
	public void run() {
		System.out.println("QQ车在跑");
		
	}

}
BMW.java:

package com.factory.cls;

public class BMW implements Car{

	private int age;
	@Override
	public void run() {
		System.out.println("BMW车在跑");
		
	}

}
Red.java:

package com.factory.cls;

public class Red implements Color{

	@Override
	public void createColor() {
		// TODO Auto-generated method stub
		System.out.println("红色");
	}

}
Blue.java:
package com.factory.cls;

public class Blue implements Color{

	@Override
	public void createColor() {
		// TODO Auto-generated method stub
		System.out.println("蓝色");
	}


}
FactoryBuilder.java:工厂创建工具类,用于根据名称创建车工厂对象还是颜色工厂对象。

package com.factory.cls;

public class FactoryBuilder {

	public static AbstractFactory getFactory(String factoryName){
		if("car".equals(factoryName)){
			return new FactoryCar();
		}else if("color".equals(factoryName)){
			return new FactoryColor();
		}
		return null;
	}
}
测试类:通过工厂创建工具类调用静态方法getFactory创建对应工厂,通过工厂创建并获取对应对象,再通过对象调用各自方法。
package com.factory.cls;

public class Test {
	public static void main(String[] args) {
		AbstractFactory factory = FactoryBuilder.getFactory("car");
		Car car = factory.getCar("QQ");
		factory = FactoryBuilder.getFactory("color");
		Color color = factory.getColor("blue");
		color.createColor();
		car.run();

	}

}













  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值