close

Sample Factory,

先透過Abstract 做出模型架構, 再加以實作

uml圖片

FACP  

 

 

例如:

賣杯子,很多種的杯子,但杯子有分高級品和低等品

 

先建立杯子的基本模型

    public abstract class Cap
        {
            public CapClass create(string position)
            {
                CapClass p = createPayList(position);
                return p;
            }

            protected abstract CapClass createPayList(string position);
        }


再建立杯子本身有哪些價格和變數


        public abstract class CapClass
        {
            protected double poormoney;
            protected double goodmoney;
            protected double cost;

            public abstract double sell();
            public abstract double hismoney();
            public abstract double costall();

            public void printMoneyall()
            {
                Console.WriteLine("原價: {0}",sell());
                Console.WriteLine("打折: {0}",hismoney());
                Console.WriteLine("趴數: {0}",costall());
            }
        
        }

當模型都建立好了之後, 再分別設定高級杯、普通杯和低價杯的價格

//高級杯
        public class TaiwanHighClass :CapClass
        {
            public TaiwanHighClass()
            {
                poormoney = 1000;
                goodmoney = 900;
                cost = 0.9;
            }
            public override double sell()
            {
                return (poormoney + goodmoney);
            }
            public override double hismoney()
            {
                return ((poormoney+goodmoney) * 0.9);
            }
            public override double costall()
            {
                return cost;
            }

        }

//低價杯
        public class TaiwanLowClass : CapClass
        {
            public TaiwanLowClass()
            {
                poormoney = 100;
                goodmoney = 100;
                cost = 0.9;
            }
            public override double sell()
            {
                return (poormoney + goodmoney);
            }
            public override double hismoney()
            {
                return ((poormoney + goodmoney) * 0.9);
            }
            public override double costall()
            {
                return cost;
            }

        }

//普通杯
        public class TaiwanNormalClass : CapClass
        {
            public TaiwanNormalClass()
            {
                poormoney = 500;
                goodmoney = 400;
                cost = 0.9;
            }
            public override double sell()
            {
                return (poormoney + goodmoney);
            }
            public override double hismoney()
            {
                return ((poormoney + goodmoney) * 0.9);
            }
            public override double costall()
            {
                return cost;
            }

        }


當價格的原型都設定好了之後, 再將原本的[工廠]作實體化, 如此就可以透過你所寫入的變數來分別傳回不同的物件並輸入

     public class GlassHighCap : Cap
        {
            protected override CapClass createPayList(string position)
            {
                switch (position)
                {
                    case "高級杯":
                         return new TaiwanHighClass();
                    
                    case "低級杯":
                         return new TaiwanLowClass();
                    
                    default:
                        return new TaiwanNormalClass();
                    
                }
            }
                
        }

//最後是結果的列印

 class Program
        {
            static void Main(string[] args)
            {
                Cap twHICap = new GlassHighCap();
                 
                Console.WriteLine("高級杯");
                CapClass twA = twHICap.create("高級杯");
                twA.printMoneyall();

                Console.WriteLine("普通杯");
                CapClass twTeamLeader = twHICap.create("普通杯");
                twTeamLeader.printMoneyall();

                Console.WriteLine("低級杯");
                CapClass twEmployee = twHICap.create("低級杯");
                twEmployee.printMoneyall();

                Console.ReadLine();
            }
        }

 

 

 

 

 

參考網站:

史帝芬心得筆記 : http://my.so-net.net.tw/idealist/Patterns/

arrow
arrow

    斷了線的小木偶 發表在 痞客邦 留言(0) 人氣()