DesignPattern-Abstract Factory 修改

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();
        }
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值