设计模式 前面我们已经说到了单例模式 今天我们谈第二种设计模式 C# 抽象工厂设计模式。当前设计模式是解决,在软件系统中经常面临着“一系列相互依赖的对象”的创建工作。同时,由于需求的变化,往往存在更多系列对象的创建工作,和修改扩展工作。正常设计我们难于维护。
抽象工厂模式由以下几个角色组成:
- 抽象产品(Abstract Product):声明了产品的接口。
- 具体产品(Concrete Product):实现抽象产品接口的具体产品类。
- 抽象工厂(Abstract Factory):声明了一组创建产品的抽象方法。
- 具体工厂(Concrete Factory):实现抽象工厂的方法,创建具体产品的实例。
下面是一个示例:
// 抽象产品接口
interface IProduct
{
void DoSomething();
}
// 具体产品A
class ConcreteProductA : IProduct
{
public void DoSomething()
{
Console.WriteLine("ConcreteProductA: Doing something.");
}
}
// 具体产品B
class ConcreteProductB : IProduct
{
public void DoSomething()
{
Console.WriteLine("ConcreteProductB: Doing something.");
}
}
// 抽象工厂接口
interface IFactory
{
IProduct CreateProduct();
}
// 具体工厂A
class ConcreteFactoryA : IFactory
{
public IProduct CreateProduct()
{
return new ConcreteProductA();
}
}
// 具体工厂B
class ConcreteFactoryB : IFactory
{
public IProduct CreateProduct()
{
return new ConcreteProductB();
}
}
// 使用示例
class Program
{
static void Main(string[] args)
{
IFactory factoryA = new ConcreteFactoryA();
IProduct productA = factoryA.CreateProduct();
productA.DoSomething(); // Output: ConcreteProductA: Doing something.
IFactory factoryB = new ConcreteFactoryB();
IProduct productB = factoryB.CreateProduct();
productB.DoSomething(); // Output: ConcreteProductB: Doing something.
}
}
具体项目案例目前还没有,但我们可以出一个题目看大家是否掌握了,简单的抽象工厂的搭建。
题目:
假设你正在设计一个游戏,该游戏有两个种类的角色:英雄(Hero)和怪物(Monster)。每个角色都有不同的属性,如名称(Name)和攻击力(Attack)。同时,还有两个不同的职业:战士(Warrior)和法师(Mage)。每个职业的角色具有不同的特点。
使用抽象工厂模式设计一个角色工厂(CharacterFactory),其中包含两个具体工厂:WarriorFactory(战士工厂)和MageFactory(法师工厂)。角色工厂应该具有创建角色的方法(CreateCharacter),该方法将根据给定的职业类型返回相应的角色对象。
你的任务是根据抽象工厂模式的实现,定义相应的类和接口,并提供一个示例程序来演示如何使用这些工厂创建和使用角色对象。
示例:
class Program
{
static void Main()
{
CharacterFactory characterFactory = new CharacterFactory();
Hero hero = characterFactory.CreateHero();
hero.CreateCharacter();
Console.ReadKey();
}
}
interface ICharacter
{
string Name { get; set; }
double Attack { get; set; }
double Level { get; set; }
}
interface IHero : ICharacter
{
object HeroTiedian { get; set; }
void CreateCharacter();
}
interface IMonster : ICharacter
{
object MonsterTiedian { get; set; }
void CreateCharacter();
}
public class HeroClass : IHero
{
public string Name { get; set; }
public double Attack { get; set; }
public double Level { get; set; }
public object HeroTiedian { get; set; }
public void CreateCharacter()
{
Console.WriteLine("英雄角色创建");
}
}
public class MonsterClass : IMonster
{
public object MonsterTiedian { get; set; }
public string Name { get; set; }
public double Attack { get; set; }
public double Level { get; set; }
public void CreateCharacter()
{
Console.WriteLine("怪兽角色创建");
}
}
interface ICharacterFactory
{
IHero CreateHero();
IMonster CreateMonster();
}
class CharacterFactory : ICharacterFactory
{
public IHero CreateHero()
{
return new HeroClass();
}
public IMonster CreateMonster()
{
return new MonsterClass();
}
}
之后的项目实战我在补齐!。