简单工厂模式(静态工厂方法(Static Factory Method)模式)

简单工厂模式是一种创建型设计模式,也被称为静态工厂方法模式。它通过一个工厂对象来决定创建哪种产品实例,降低了代码的耦合度,便于拓展和维护。模式包括工厂角色、抽象类角色和具体产品类角色。适用于产品种类较少且客户知道所需参数类型的场景。文中以简单的计算器为例,介绍了抽象类和具体类的设计。

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

                                                                                 简单工厂模式

所谓的简单工厂模式-----------这里百度百科里面的解释:简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工引用百度厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现

简单点说就是一个工厂类根据传入的参数按照写好的业务逻辑动态进行对象(该对象继承了一个抽象的父类或接口)的创建。这样可以减少很多对象的创建,提高代码质量,同时也方便拓展和维护。


这个模式包含了3个角色:工厂角色,抽象类角色,具体产品类。

工厂类:封装了动态创建具体产品对象的业务逻辑。

抽象类角色:定义一系列的产品规范。

具体产品类:它是工厂的最终目标,工厂类按照自己的业务逻辑执行抽象类所定义的规范创建具体的产品类。

使用场景:

1.用于创建类比较少的时候。

2.客户知道要给予传入的参数类型

3.由于这种方法违反了高内聚的责任分配原则,所以一般用于比较简单的情况。

代码样例:(简单的计算器)

抽象类设计

/**
 * 
 * @author Administrator 
 * 抽象类或父类接口
 * 
 */
public abstract class Operation {
	public Operation() {
		super();
		// TODO Auto-generated constructor stub
	}

	public double m_NumA;
	public double m_NumB;

	public double getM_NumA() {
		return m_NumA;
	}

	public void setM_NumA(double m_NumA) {
		this.m_NumA = m_NumA;
	}

	public double getM_NumB() {
		return m_NumB;
	}

	public void setM_NumB(double m_NumB) {
		this.m_NumB = m_NumB;
	}

	public Operation(double m_NumA, double m_NumB) {
		super();
		this.m_NumA = m_NumA;
		this.m_NumB = m_NumB;
	}
        //抽象方法
	public abstract double GetResult();
}

具体类设计

public class OperationDiv extends Operation {

	@Override
	public double GetResult() {
		// TODO Auto-generated method stub
		double result=0.0d;
		try{
			result = m_NumA/m_NumB;
		}catch(Exception e){
			System.out.println("除数不能为0");
		}
		return result;
	}

}

public class OperationMul extends Operation {

	@Override
	public double GetResult() {
		// TODO Auto-generated method stub
		return m_NumA*m_NumB;
	}

}
public class OperationAdd extends Operation {

	@Override
	public double GetResult() {	
		return m_NumA+m_NumB;
	}	
}

public class OperationSub extends Operation{

	@Override
	public double GetResult() {
		// TODO Auto-generated method stub
		return m_NumA-m_NumB;
	}

}

工厂类

/**
 * 工厂类:封装了动态创建对象的逻辑
 * 
 * @author Administrator
 *
 */
public class Static_Factory {
	
	public Operation CreateOperation(String type) {
		Operation operation=null;
		switch (type) {
		case "+": {
			operation = new OperationAdd();
		}
			break;
		case "-": {
			operation = new OperationSub();
		}
			break;
		case "*": {
			operation=new OperationMul();
		}
			break;
		case "/": {
			operation=new OperationDiv();
		}
			break;
			default:break;
		}
		return operation;
		
	}


	public Static_Factory() {
		super();
		// TODO Auto-generated constructor stub
	}


	public static void main(String[] args) {
		// TODO Auto-generated method stub


	}
}
测试

public class Test {

	public static void main(String[] args) {
		//创建工厂
		Static_Factory factory= new Static_Factory();
		Operation operation = factory.CreateOperation("+");
		operation.m_NumA=1;
		operation.m_NumB=2;
		System.out.println("结果为:"+operation.GetResult());
	}
}












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值