程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 程序員上班路上案例解說工廠模式

程序員上班路上案例解說工廠模式

編輯:關於.NET

一、前言

同樣在上班的路上,一個程序員想著是買梅干菜肉包還是買酸辣粉絲包,到了包子點卻發現只有饅頭餡子的包子了,卻買了一包豆漿;

一個程序員可能在在家吃完飯開車去上班了,這尼瑪是富二代;

一個程序員可能想著如何把自己的代碼如何優化,如何提高性能,如何的如何……

上班路上的程序員讓你輕松了解三個設計模式

二、簡單工廠模式

簡單工廠模式(Simple Factory Pattern):又稱為靜態工廠方法(Static Factory Method)模式,它屬於類創建型模式。在簡單工廠模式中,可以根據參數的不同返回不同類的實例。簡單工廠模式專門定義一個類來負責創建其他類的實例,被創建的實例通常都具有共同的父類。

簡單工廠模式就好比一個是一個富二代程序員,你要什麼,簡單工廠就給你什麼。

簡單工廠模式包括三個角色:抽象產品角色,具體產品角色,工廠角色

代碼實現如下:

    //抽象產品角色:交通工具車
    public abstract class Car
    {
        public virtual void GoToWork()
        {
        }
    }

    //具體產品角色:自行車
    public class Bike : Car
    {
        public override void GoToWork()
        {
            Console.WriteLine("騎自行車去上班");
        }
    }
    //具體產品角色:公交車
    public class Bus : Car
    {
        public override void GoToWork()
        {
            Console.WriteLine("做公交車去上班");
        }
    }
    //工廠角色:簡單工廠類
    public class SimpleFactory
    {
        public static Car CreateSimple(string str)
        {
            Car simple = null;
            switch (str)
            {
                case "Bike":
                    simple = new Bike();
                    break;
                case "Bus":
                    simple = new Bus();
                    break;
                //……
            }
            return simple;

        }
    }

客戶端調用代碼:

            //根據客戶端傳入的參數簡單工廠決定如何去上班
            Car car = SimpleFactory.CreateSimple("Bus");
            car.GoToWork();

 

三、工廠方法模式

工廠方法模式(Factory Method Pattern)又稱為工廠模式,也叫虛擬構造器(Virtual Constructor)模式或者多態工廠(Polymorphic Factory)模式,它屬於類創建型模式。在工廠方法模式中,工廠父類負責定義創建產品對象的公共接口,而工廠子類則負責生成具體的產品對象,這樣做的目的是將產品類的實例化操作延遲到工廠子類中完成,即通過工廠子類來確定究竟應該實例化哪一個具體產品類。

工廠方法模式包括四個角色:抽象產品角色,具體產品角色,抽象工廠角色,具體工廠角色

具體示例代碼實現如下:

    //抽象產品角色:交通工具車
    public abstract class Car
    {
        public virtual void GoToWork()
        {
        }

    }

    //具體產品角色:自行車
    public class Bike : Car
    {
        public override void GoToWork()
        {
            Console.WriteLine("騎自行車去上班");
        }
    }
    //具體產品角色:公交車
    public class Bus : Car
    {
        public override void GoToWork()
        {
            Console.WriteLine("做公交車去上班");
        }
    }

    //抽象工廠角色:工廠接口
    public interface IFactory
    {
        Car ByWhatWay();
    }
    //具體工廠類:自行車類
    public class BikeFactory : IFactory
    {
        public Car ByWhatWay()
        {
            return new Bike();
        }
    }
    //具體工廠類:公交車類
    public class BusFactory : IFactory
    {
        public Car ByWhatWay()
        {
            return new Bus();
        }

    }

客戶端調用代碼:

            //根據客戶端實例化的工廠決定如何去上班
            IFactory factory = new BusFactory();
            Car car = factory.ByWhatWay();
            car.GoToWork();

 

四、抽象工廠模式

抽象工廠模式(Abstract Factory Pattern):提供一個創建一系列相關或相互依賴對象的接口,而無須指定它們具體的類。抽象工廠模式又稱為Kit模式,屬於對象創建型模式。

抽象工廠模式包括四個角色:抽象產品角色,具體產品角色,抽象工廠角色,具體工廠角色

具體示例代碼如下:

//抽象交通工具車
    public abstract class Car
    {
        //名字
        public string CarName{ get; set; }
        public virtual string GoToWork()
        {
            return CarName;
        }

    }
    //抽象早飯類
    public abstract class BreakFast
    {
        //早飯名稱
        public string FoodName { get; set; }

        public virtual string Eat()
        {
            return FoodName;
        }
    }

    //自行車
    public class Bike : Car
    {
        public override string GoToWork()
        {
            CarName = "騎著自行車";
            return CarName;
        }
    }
    //公交車
    public class Suv: Car
    {
        public override string GoToWork()
        {
            CarName = "開著SUV汽車";
            return CarName;
        }
    }

    //高逼格早飯:三明治牛奶
    public class SandWichAndMilk : BreakFast
    {
        public override string Eat()
        {
            FoodName = "三明治和牛奶";
            return FoodName;
        }
    }
    
    //苦逼早飯:包子豆漿
    public class BaoziAndDoujiang : BreakFast
    {
        public override string Eat()
        {
            FoodName = "包子豆漿";
            return FoodName;
        }
    }

    //抽象工廠類
    public abstract class AbstractFactory
    {
        //創建交通工具方法
        public abstract Car CreatCar();

        //創建早飯方法
        public abstract BreakFast CreateBreakFast();

    }

    //具體工廠類
    public class LowFactory : AbstractFactory
    {
        public override Car CreatCar()
        {
            return new Bike();
        }

        public override BreakFast CreateBreakFast()
        {
            return new BaoziAndDoujiang();
        }
    }
    //具體工廠類
    public class HighFactory : AbstractFactory
    {
        public override Car CreatCar()
        {
            return new Suv();
        }

        public override BreakFast CreateBreakFast()
        {
            return new SandWichAndMilk();
        }
    }

    public class CoderLove
    {
        private Car car;
        private BreakFast breakFast;
        public CoderLove (AbstractFactory fac)
        {
            car=fac.CreatCar();
            breakFast=fac.CreateBreakFast();
        }

        public void GetCoderLove()
        {
            Console.WriteLine("早飯吃完"+breakFast.Eat()+","+car.GoToWork()+"去上班");
        }
    }

客戶端調用:

            AbstractFactory factory=new HighFactory();
            CoderLove coder=new CoderLove(factory);
            coder.GetCoderLove();

五、總結

1、這個三個模式都屬於對象創建型模式

2、簡單工廠模式簡單的理解為客戶端告訴工廠他想要什麼實例,工廠就給生產什麼實例

3、工廠方法模式可以理解客戶端有了創建實例的機器,他想要什麼實例就自己生產什麼實例

4、抽象工廠模式最常見的情況是一套程序需要多套數據實現的情況下

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved