大话设计模式之(一)工厂模式

(大话设计模式)
最近在研究大话设计模式,正好终结一下,以备自己后续查看。
书中对设计模式分类有28种,今天终结下最为常见的模式,工厂模式。工厂模式有三种:简单工厂模式,工厂方法模式,抽象工厂模式。
下面说说这三种模式的差异,并一一举以书中的例子加以说明。
简单工厂模式:用一个单独的类来做创建实例的过程,就是一个工厂,以此来增加设计的可扩展性,同时要求设计具有松耦合性质。下面以计算器为例子来说明。
原生的实现方式我们可以用一个操作类,这里class名为operation,用多个case来实现多种的操作方式,如:

public static double getResult(double numberA,double numberB,String operation){
		double result=0d;
		switch(operation){
		case "+":
				result=numberA+numberB;
				break;
		case "-":
			result=numberA-numberB;
			break;
		case "*":
			result=numberA*numberB;
			break;
		case "/":
			result=numberA/numberB;
			break;
		}
		return result;
	}

但这种方式的编写有一个明显的弊端,如果现在需要扩展运算,如开根号运算,就很麻烦。这时候简单工厂模式就起到作用。定义一个operation 父类

public class Operation {
 private double numberA;
 private double numberb;
public double getNumberA() {
	return numberA;
}
public void setNumberA(double numberA) {
	this.numberA = numberA;
}
public double getNumberb() {
	return numberb;
}
public void setNumberb(double numberb) {
	this.numberb = numberb;
}
 public double GetResut(){
	  double result=0;
	 return result;
 }
}

子类为各运算方法重写父类getResult方法,如

public class AddOperation extends Operation{
 public double GetResut(){
	double result=0;
	result=getNumberA()+getNumberb();
	 return result;
 }
}

再定义一个工厂类,根据运算符号选择对应的子类运行,这样对于开根号运算就可以利用到加减乘除运算,对于新增的运行方法只需增加对应的子类,并在工厂中做相应的增加修改即可。
大家估计已经注意到简单工厂模式有一个弊端,那就是需要在客户端知道我要用到的是哪一种运行,并且每增加一种运行就需要在工厂中case一种运行符。
工厂模式很好的解决了这个问题,依然以上面的例子为例,工厂模式将实例化到其子类。定义一个工厂接口

public interface IFactory {
Operation CreateOperaton();
}
将实例化创建增加操作为例如下:

 public class AddFactory implements IFactory{
    
    	@Override
    	public Operation CreateOperaton() {		
    		return new AddOperation();
    	}
    }

因此客户端的运行只需要实例化对应的运算,即可。需要扩展其他运行无需再去修改工厂中的运算代码,只需要新建运行类,在实现工厂模式的,即可,完美的满足开放-封闭的设计原则。
最后,来说说抽象工厂模式,所谓的抽象是指简单工厂模式中的case条件我们并不事先确定,但里面的operaton运行基本一致,那我们可以用反射配置的方式来获取case的内容,从而根据反射的获取的内容创建到对应的operation操作,值得说明的是所有用简单工厂模式case得到的operation都可以用反射配置来实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,它通过一个工厂类来创建不同类型的对象,而无需暴露对象创建的逻辑给客户端。在Python中,简单工厂模式可以通过一个工厂类来创建不同的产品对象。下面是一个简单的示例: ```python class Product: def operation(self): pass class ConcreteProductA(Product): def operation(self): print("Performing operation A.") class ConcreteProductB(Product): def operation(self): print("Performing operation B.") class SimpleFactory: @staticmethod def create_product(product_type): if product_type == "A": return ConcreteProductA() elif product_type == "B": return ConcreteProductB() else: raise ValueError("Invalid product type.") # 使用简单工厂创建产品对象 factory = SimpleFactory() product_a = factory.create_product("A") product_a.operation() product_b = factory.create_product("B") product_b.operation() ``` 在上述示例中,`Product` 是一个抽象产品类,`ConcreteProductA` 和 `ConcreteProductB` 是具体产品类。`SimpleFactory` 是工厂类,通过 `create_product` 方法根据不同的产品类型创建相应的产品对象。 通过简单工厂模式,客户端无需知道具体的产品类,只需要通过工厂类来创建产品对象。这样可以降低客户端与具体产品类的耦合度,并且当需要新增产品时,只需要修改工厂类即可。 希望这个简单的示例能帮助你理解简单工厂模式在Python中的应用。如果有任何进一步的问题,请随时提问!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值