C#寫的工廠抽象模式

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


namespace FactoryAbstruct
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("北京生廠商來了");
            Factory bjFactory = new BJFactory(); /*首先產生一個工廠*/
            Cement cement1 = bjFactory.createCement();
            cement1.create();
            Rebar rebar1 = bjFactory.createRebar();
            rebar1.create();
            Console.WriteLine();


            Console.WriteLine("深圳生產商來了");
            Factory szFactory = new SZFactory();
            Cement cement2 = szFactory.createCement();
            cement2.create();
            Rebar rebar2 = szFactory.createRebar();
            rebar2.create();
        }
    }
    
    /*有一個工廠 有兩家分廠, 兩家分廠又分別生產這不同的產品*/
    /*1. 首先工廠生產水泥(Cement)和鋼筋(Rebar)*/
    public abstract class Cement
    {
        public abstract void create();
    }
    /*2. 水泥產品 又有還集中分類*/
    public class Cement1 : Cement
    {
        public override void create()
        {
            Console.WriteLine("生產一號強勁水泥");
        }
    }
    public class Cement2 : Cement
    {
        public override void create()
        {
            Console.WriteLine("生產二號鬆軟水泥");
        }
    }


    /*3. 鋼筋也需要生產*/
    public abstract class Rebar
    {
        public abstract void create();
    }
    /*4. 鋼筋產品 又有還集中分類*/
    public class Rebar1 : Rebar
    {
        public override void create()
        {
            Console.WriteLine("生產一號強勁鋼筋");
        }
    }
    public class Rebar2 : Rebar
    {
        public override void create()
        {
            Console.WriteLine("生產二號鬆軟鋼筋");
        }
    }




    /*5. 該工廠又兩處分廠 分別是北京工廠和深圳工廠
     假設北京生產一號產品  深圳生產二號類產品*/
    public abstract class Factory
    {
        public abstract Cement createCement();
        public abstract Rebar createRebar();
    }


    public class BJFactory:Factory
    {
        public override Cement createCement()
        {
            return new Cement1();
        }


        public override Rebar createRebar()
        {
            return new Rebar1();
        }
    }


    public class SZFactory:Factory
    {
        public override Cement createCement()
        {
            return new Cement2();
        }


        public override Rebar createRebar()
        {
            return new Rebar2();
        }
    }


}




/*畢業近一年了,學了不少金融業務, 現在覺得走技術+金融業務路線

  將自己所學所想 寫成博文,和programmers共勉*/

發佈了160 篇原創文章 · 獲贊 5 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章