using System;
namespace 抽象工厂
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Client client = new Client();
client.main();
Console.ReadLine();
}
}
//--------------------------工具层------------------------------------------------
public class Guige
{
public Guige(string guige)
{
this.guige = guige;
}
private string guige;
public string get()
{
return guige;
}
}
public abstract class Function
{
protected Guige guige;
public void exe()
{
Console.WriteLine("动作:" + getFunction() + " 规格:" + guige.get());
}
public abstract string getFunction();
}
public class Shot : Function
{
public override string getFunction()
{
return "发射";
}
}
public class Run : Function
{
public override string getFunction()
{
return "跑";
}
}
public class Shot70 : Shot
{
public Shot70()
{
guige = new Guige("70");
}
}
public class Run70 : Run
{
public Run70()
{
guige = new Guige("70");
}
}
public class Shot50 : Shot
{
public Shot50()
{
guige = new Guige("50");
}
}
public class Run50 : Run
{
public Run50()
{
guige = new Guige("50");
}
}
//--------------------------抽象层------------------------------------------------
interface IFactory
{
ITank createTank();
}
interface ITank
{
void exe();
}
//--------------------------实体层------------------------------------------------
class Tank50: ITank
{
public void exe()
{
new Shot50().exe();
new Run50().exe();
}
}
class Tank70 : ITank
{
public void exe()
{
new Shot70().exe();
new Run70().exe();
}
}
class Factory70: IFactory
{
public ITank createTank()
{
return new Tank70();
}
}
class Factory50 : IFactory
{
public ITank createTank()
{
return new Tank50();
}
}
//--------------------------客户端------------------------------------------------
class Client
{
public void main() {
createTank(new Factory50());
createTank(new Factory70());
}
public void createTank(IFactory factory)
{
ITank tank = factory.createTank();
tank.exe();
}
}
}