using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Design_Patterns
{
//一系列相互依赖的对象 变化点是在有多种底板、墙和屋顶
public interface Floor
{
}
public interface Wall
{
}
public interface Roof
{
}
public class ChinaFloor : Floor
{
}
public class ChinaWall : Wall
{
}
public class ChinaRoof : Roof
{
}
public class USAFloor : Floor
{
}
public class USAWall : Wall
{
}
public class USARoof : Roof
{
}
public class FranceFloor : Floor
{
}
public class FranceWall : Wall
{
}
public class FranceRoof : Roof
{
}
//抽象工厂
public abstract class HouseFactory
{
public abstract Floor CreateFloor();
public abstract Wall CreateWall();
public abstract Roof CreateRoof();
}
public class ChinaHouseFactory : HouseFactory
{
public override Floor CreateFloor()
{
return new ChinaFloor();
}
public override Wall CreateWall()
{
return new ChinaWall();
}
public override Roof CreateRoof()
{
return new ChinaRoof();
}
}
public class USAHouseFactory : HouseFactory
{
public override Floor CreateFloor()
{
return new USAFloor();
}
public override Wall CreateWall()
{
return new USAWall();
}
public override Roof CreateRoof()
{
return new USARoof();
}
}
public class FranceHouseFactory : HouseFactory
{
public override Floor CreateFloor()
{
return new FranceFloor();
}
public override Wall CreateWall()
{
return new FranceWall();
}
public override Roof CreateRoof()
{
return new FranceRoof();
}
}
//工厂方法 单系列产品种类是不定的,是变化的,不依赖 变化点是在有多种房子
public abstract class House
{
private Floor f = null;
public Floor F
{
get { return f; }
set { f = value; }
}
private Wall[] w = null;
public Wall[] W
{
get { return w; }
set { w = value; }
}
private Roof r = null;
public Roof R
{
get { return r; }
set { r = value; }
}
public House()
{
GetHouse();
}
public abstract House GetHouse();
}
public class ChinaHouse : House
{
public override House GetHouse()
{
House h = new ChinaHouse();
HouseFactory hf = new ChinaHouseFactory();
Floor f = hf.CreateFloor();
Wall w1 = hf.CreateWall();
Wall w2 = hf.CreateWall();
Wall w3 = hf.CreateWall();
Wall w4 = hf.CreateWall();
Roof r = hf.CreateRoof();
h.F = f;
h.W=new Wall[]{w1,w2,w3,w4};
h.R = r;
return h;
}
}
public class USAHouse : House
{
public override House GetHouse()
{
House h = new USAHouse();
HouseFactory hf = new USAHouseFactory();
Floor f = hf.CreateFloor();
Wall w1 = hf.CreateWall();
Wall w2 = hf.CreateWall();
Wall w3 = hf.CreateWall();
Wall w4 = hf.CreateWall();
Roof r = hf.CreateRoof();
h.F = f;
h.W = new Wall[] { w1, w2, w3, w4 };
h.R = r;
return h;
}
}
public class CreateHouse
{
public void Test()
{
House chinah = new ChinaHouse();
House usah = new USAHouse();
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Design_Patterns
{
//一系列相互依赖的对象 变化点是在有多种底板、墙和屋顶
public interface Floor
{
}
public interface Wall
{
}
public interface Roof
{
}
public class ChinaFloor : Floor
{
}
public class ChinaWall : Wall
{
}
public class ChinaRoof : Roof
{
}
public class USAFloor : Floor
{
}
public class USAWall : Wall
{
}
public class USARoof : Roof
{
}
public class FranceFloor : Floor
{
}
public class FranceWall : Wall
{
}
public class FranceRoof : Roof
{
}
//抽象工厂
public abstract class HouseFactory
{
public abstract Floor CreateFloor();
public abstract Wall CreateWall();
public abstract Roof CreateRoof();
}
public class ChinaHouseFactory : HouseFactory
{
public override Floor CreateFloor()
{
return new ChinaFloor();
}
public override Wall CreateWall()
{
return new ChinaWall();
}
public override Roof CreateRoof()
{
return new ChinaRoof();
}
}
public class USAHouseFactory : HouseFactory
{
public override Floor CreateFloor()
{
return new USAFloor();
}
public override Wall CreateWall()
{
return new USAWall();
}
public override Roof CreateRoof()
{
return new USARoof();
}
}
public class FranceHouseFactory : HouseFactory
{
public override Floor CreateFloor()
{
return new FranceFloor();
}
public override Wall CreateWall()
{
return new FranceWall();
}
public override Roof CreateRoof()
{
return new FranceRoof();
}
}
//工厂方法 单系列产品种类是不定的,是变化的,不依赖 变化点是在有多种房子
public abstract class House
{
private Floor f = null;
public Floor F
{
get { return f; }
set { f = value; }
}
private Wall[] w = null;
public Wall[] W
{
get { return w; }
set { w = value; }
}
private Roof r = null;
public Roof R
{
get { return r; }
set { r = value; }
}
public House()
{
GetHouse();
}
public abstract House GetHouse();
}
public class ChinaHouse : House
{
public override House GetHouse()
{
House h = new ChinaHouse();
HouseFactory hf = new ChinaHouseFactory();
Floor f = hf.CreateFloor();
Wall w1 = hf.CreateWall();
Wall w2 = hf.CreateWall();
Wall w3 = hf.CreateWall();
Wall w4 = hf.CreateWall();
Roof r = hf.CreateRoof();
h.F = f;
h.W=new Wall[]{w1,w2,w3,w4};
h.R = r;
return h;
}
}
public class USAHouse : House
{
public override House GetHouse()
{
House h = new USAHouse();
HouseFactory hf = new USAHouseFactory();
Floor f = hf.CreateFloor();
Wall w1 = hf.CreateWall();
Wall w2 = hf.CreateWall();
Wall w3 = hf.CreateWall();
Wall w4 = hf.CreateWall();
Roof r = hf.CreateRoof();
h.F = f;
h.W = new Wall[] { w1, w2, w3, w4 };
h.R = r;
return h;
}
}
public class CreateHouse
{
public void Test()
{
House chinah = new ChinaHouse();
House usah = new USAHouse();
}
}
}