【Android】三種工廠模式簡析

簡單介紹三種工廠模式:簡單工廠模式,工廠方法模式,抽象工廠模式
1.簡單工廠模式
這是一個小工廠,什麼都由自己生產,別人要什麼就調用自己的相應工具去生產
具備三個特徵:具體工廠A,具體生產工具B,抽象生產對象C
就是 A調用工具B去生產C,工具可以有多種(我成爲類B工具),每種生產對應的產品(類C產品,C是所有產品的父接口),下面看代碼

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

    //具體產品角色:自行車  工具B
    public class Bike : Car
    {
        public override void GoToWork()
        {
            Console.WriteLine("騎自行車去上班");
        }
    }
    //具體產品角色:公交車  工具B
    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();

2.工廠方法模式
就像一個公司做大了,涉及的業務多了,管理就不方便了,這時候往往會成了子公司,讓每一個子公司去負責一塊業務,自己就稱爲了管理子公司的母公司,而不涉及具體的業務(抽象) 所以就有四 個角色: 母公司 ->抽象工廠 ,子公司 -> 具體工廠, 產品類 -> 抽象接口, 生產工具類 -> 具體方法

//抽象產品角色:交通工具車
    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();

3.抽象工廠模式,這個模式就是前面連個模式的結合,即做大了,成爲了母公司,並且子公司也做大了,可以做很多業務。從大局來看,是工廠方法模式,從局部看,是簡單工廠模式,就這樣,直接看代碼

//抽象交通工具車
    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();

這裏寫圖片描述

抽象工廠模式隔離了具體類的生成,使得客戶並不需要知道什麼被創建。

由於這種隔離,更換一個具體工廠就變得相對容易。所有的具體工廠都實現了抽象工廠中定義的那些公共接口,因此只需改變具體工廠的實例,就可以在某種程度上改變整個軟件系統的行爲。

除了以上苦逼程序員,高逼格程序員,還可以具體添加一個開車SUV吃着包子豆漿的具體工廠,也可以添加騎着自行車吃着三明治牛奶的具體工廠,換不同的子公司去做,就有不同的結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章