JAVA设计模式之工厂模式之抽象工厂模式

本文通过具体实例介绍了抽象工厂模式的应用,展示了如何通过该模式来创建一系列相关或相互依赖的对象,而无需指定它们具体的类。文章提供了两个测试用例,分别演示了颜色填充和形状绘制的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


public class AbstractFactoryTest {

	@Test
	public void testFillColor(){
		AbstractFactory colorFactory=new ColorFactory();
		Color red=colorFactory.getColor("Red");
		assertEquals("Red fill",red.fill());
	}
	
	@Test
	public void testDrawShape(){
		AbstractFactory shapeFactory=new ShapeFactory();
		Shape circle=shapeFactory.getShape("Circle");
		assertEquals("Circle draw",circle.draw());
	}
}
/**
 * 工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构
 */
public abstract class AbstractFactory {
     public abstract Color getColor(String color);
     public abstract Shape getShape(String shape);
}
public interface Color {

	String fill();
}
public interface Shape {

	String draw();
}

public class ColorFactory extends AbstractFactory {

	@Override
	public Color getColor(String color) {
	
		if(null == color){
			return null;
		}
		if("Red".equalsIgnoreCase(color)){
			return new Red();
		}else if("Black".equalsIgnoreCase(color)){
			return new Black();
		}else if("White".equalsIgnoreCase(color)){
			return new White();
		}
		return null;
	}

	@Override
	public Shape getShape(String shape) {

		return null;
	}
}
public class ShapeFactory extends AbstractFactory  {


	@Override
	public Shape getShape(String shape) {
	    if(null == shape){
	    	return null;
	    }
	    if("Circle".equalsIgnoreCase(shape)){
	    	return new Circle();
	    }else if("Square".equalsIgnoreCase(shape)){
	    	return new Square();
	    }else if("Rectangle".equalsIgnoreCase(shape)){
	    	return new Rectangle();
	    }
	    
		return null;
	}
  
	@Override
	public Color getColor(String color) {
		return null;
	}
}
备注:Color Shape的具体实现略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

算法小生Đ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值