您的位置:首页 > 编程语言 > C#

C#设计模式(4)——抽象工厂模式

2017-01-10 17:22 337 查看
一、概念:将对象的创建交给一个叫做工厂的对象来统一进行处理。主要是将对象的依赖关系进行解耦,消除对象之间的直接耦合。

二、模型:

1、逻辑模型



2、物理模型



三、代码实现:

1、抽象工厂代码:

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
/// <summary>
/// 水果抽象工厂
/// </summary>
public abstract class FruitAbstractFactory
{
/// <summary>
/// 水果名称,表示哪种水果如:苹果、香蕉、橘子
/// </summary>
public string FruitName { get; set; }
/// <summary>
/// 抽象方法,获取要批发水果的
/// </summary>
/// <returns>要批发的水果</returns>
public abstract string GetCurrentFruit();
}
}


2、苹果工厂代码

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
/// <summary>
/// 苹果工厂
/// </summary>
public class AppleFactory : FruitAbstractFactory
{
public AppleFactory()
{
FruitName = "苹果";
}
/// <summary>
/// 重写基类的获取水果方法
/// </summary>
/// <returns>要批发的水果</returns>
public override string GetCurrentFruit()
{
return "给你:" + base.FruitName;
}
}
}


3、香蕉工厂代码

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
/// <summary>
/// 香蕉工厂
/// </summary>
public class BananaFactory : FruitAbstractFactory
{
public BananaFactory()
{
FruitName = "香蕉";
}

public override string GetCurrentFruit()
{
return "给你:" + base.FruitName;
}
}
}


4、橘子工厂代码

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
/// <summary>
/// 橘子工厂
/// </summary>
public class TangerineFactory : FruitAbstractFactory
{
public TangerineFactory()
{
FruitName = "橘子";
}
public override string GetCurrentFruit()
{
return "给你:" + base.FruitName;
}
}
}


5、模拟调用代码

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
FruitAbstractFactory fruitfactory = new AppleFactory();//苹果工厂
Console.WriteLine(fruitfactory.GetCurrentFruit());
Console.ReadLine();
fruitfactory = new BananaFactory();//香蕉工厂
Console.WriteLine(fruitfactory.GetCurrentFruit());
Console.ReadLine();
fruitfactory = new TangerineFactory();//橘子工厂
Console.WriteLine(fruitfactory.GetCurrentFruit());
Console.ReadLine();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: