C#设计模式——AbstractFactory(抽象工厂)
业务需求: 现在需要设计一个银行支付(服务)系统,集成中国和美国两家银行的支付(服务)方式.
业务方法: 存钱(Save),取钱(Get),汇款(Post)
下面通过抽象工厂的模式实现以上需求:
(1). 定义业务方法接口(或者抽象类)
namespace AbstractFactory
{
/// <summary>
/// 银行业务接口
/// </summary>
public interface Bank
{
/// <summary>
/// 存钱
/// </summary>
/// <param name="money">金额</param>
/// <returns></returns>
string SaveMoney(double money);
/// <summary>
/// 取钱
/// </summary>
/// <param name="money">金额</param>
/// <returns></returns>
string GetMoney(double money);
/// <summary>
/// 汇款
/// </summary>
/// <param name="money">金额</param>
/// <returns></returns>
string PostMoney(double money);
}
}
(2). 中国银行具体业务实现方法
namespace AbstractFactory
{
/// <summary>
/// 中国银行具体业务实现方法
/// </summary>
public class ChinaBank:Bank
{
/// <summary>
/// 存款
/// </summary>
/// <param name="money">金额</param>
/// <returns></returns>
public string SaveMoney(double money)
{
return "您当前在中国银行存入金额" + money.ToString("0.00");
}
/// <summary>
/// 取款
/// </summary>
/// <param name="money">金额</param>
/// <returns></returns>
public string GetMoney(double money)
{
return "您当前在中国银行取得金额" + money.ToString("0.00");
}
/// <summary>
/// 汇款
/// </summary>
/// <param name="money">金额</param>
/// <returns></returns>
public string PostMoney(double money)
{
return "您当前在中国银行汇款金额" + money.ToString("0.00");
}
}
}
(3). 美国银行具体业务实现方法
namespace AbstractFactory
{
/// <summary>
/// 美国银行具体业务实现方法
/// </summary>
public class USABank:Bank
{
/// <summary>
/// 存款
/// </summary>
/// <param name="money">金额</param>
/// <returns></returns>
public string SaveMoney(double money)
{
return "您当前在美国银行存入金额" + money.ToString("0.00");
}
/// <summary>
/// 取款
/// </summary>
/// <param name="money">金额</param>
/// <returns></returns>
public string GetMoney(double money)
{
return "您当前在美国银行取得金额" + money.ToString("0.00");
}
/// <summary>
/// 汇款
/// </summary>
/// <param name="money">金额</param>
/// <returns></returns>
public string PostMoney(double money)
{
return "您当前在美国银行汇款金额" + money.ToString("0.00");
}
}
}
(4). 定义抽象工厂
namespace AbstractFactory
{
public abstract class AbstractFactory
{
public abstract Bank CreateBank();
public static AbstractFactory GetInstance(string __bankName)
{
AbstractFactory factory;
if (__bankName == "CHINA")
factory = new ChinaBankFactory();
else if (__bankName == "USA")
factory = new USABankFactory();
else
factory = null;
return factory;
}
}
}
(5). 中国银行工厂
namespace AbstractFactory
{
public class ChinaBankFactory:AbstractFactory
{
public override Bank CreateBank()
{
return new ChinaBank();
}
}
}
(6). 美国银行工厂
namespace AbstractFactory
{
public class USABankFactory:AbstractFactory
{
public override Bank CreateBank()
{
return new USABank();
}
}
}
(7). 客户端调用
namespace AbstractFactory
{
public class Client
{
AbstractFactory factory = AbstractFactory.GetInstance("CHINA");
public string Save()
{
Bank bank = factory.CreateBank();
return bank.SaveMoney(100);
}
public string Get()
{
Bank bank = factory.CreateBank();
return bank.GetMoney(100);
}
public string Post()
{
Bank bank = factory.CreateBank();
return bank.PostMoney(100);
}
}
}


浙公网安备 33010602011771号