设计模式(2)工厂模式、工厂方法模式、抽象工厂模式

  1. 工厂模式
    一个工厂可以生产不同型号的产品,客户需告诉工厂需要什么型号的产品
    这里写图片描述
    代码:
public abstract BaseOperate
{
	public double NumberA{get;set;}
	public double NumberB{get;set;}
	public abstract double GetResult();
}

public class AddOperate:BaseOperate
{
	public override double GetResult()
	{
		return NumberA+NumberB;
	}
}

public class MinusOperate:BaseOperate
{
	public override double GetResult()
	{
		return NumberA-NumberB;
	}
}

......

public class OperateFactory
{
	public BaseOperate CreateOperation(string operateName)
	{
		switch(operateName)
		{
			case "Add":return new AddOperate();
			case "Minus":return new MinusOperate();
			
			......
			
		}
	}
}


简单工厂违背了开放封闭原则,在新增功能时,需要修改工厂,这样不是一个好事情。工厂方法模式解决了这个问题。

  1. 工厂方法模式
    有多个工厂,每个工厂生产一种型号的产品,客户需到不同工厂
    这里写图片描述
    方法类与上面一致,将原有的一个工厂拆分成多个工厂,有多少个产品就有多少个工厂
    代码:
public Interface IFactory
{
	BaseOperate CreateOperation();
}

public AddFactory:IFactory
{
	public BaseOperate CreateOperation()
	{
		return new AddOperate();
	}
}

public MinusFactory:IFactory
{
	public BaseOperate CreateOperation()
	{
		return new MinusOperate();
	}
}

......

static void main(string[] agrs)
{
	IFactory factory=new AddFactory();
	BaseOperate opt =factory.CreateOperation();
	opt.GetResult();
}

在工厂方法中出现一个问题,一个工厂只能生产一个产品,但是我们经常是要在一个工厂生产一个产品的不同型号产品。接下来通过抽象工厂模式来解决这个问题。

  1. 抽象工厂模式
    有多个工厂,每个工厂生产一种产品的多种型号的多个产品
    这里写图片描述
    代码:
public Interface IUser{
};

public Interface IDepartment{
};

public Interface IFactory{
	public IUser CreateUser();
	public IDepartment CreateDepartment();
}

public class SqlserverUser : IUser{
}

public class SqlserverDepartment : IDepartment{
}

public class SqlserverFactory : IFactory{
}

public class AccessUser : IUser{
}

public class AccessDepartment : IDepartment{
}

public class AccessFactory : IFactory{
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值