久久久精品一区ed2k-女人被男人叉到高潮的视频-中文字幕乱码一区久久麻豆樱花-俄罗斯熟妇真实视频

設(shè)計(jì)模式-原型模式

public abstract class IYunSuan:ICloneable
    {
        public int result = 0;        

        public abstract void getResult(int num1, int num2);

        public abstract object Clone();
    }
    public class jia : IYunSuan
    {

        public override  void getResult(int num1, int num2)
        {
            result= num1 + num2;            
        }
        public override object Clone()
        {
            return (jia)this.MemberwiseClone();
        }

    }
    public class jian : IYunSuan, ICloneable
    {
        public override void getResult(int num1, int num2)
        {
            result = num1 - num2;
        }
        public override object Clone()
        {
            return (jian)this.MemberwiseClone();
        }
    }
    public class cheng : IYunSuan, ICloneable
    {
        public override void getResult(int num1, int num2)
        {
            result = num1 * num2;
        }
        public override object Clone()
        {
            return (cheng)this.MemberwiseClone();
        }
    }
    public class chu : IYunSuan, ICloneable
    {
        public override void getResult(int num1, int num2)
        {
            if (num2 == 0) result= 0;
            result= num1 / num2;
        }
        public override object Clone()
        {
            return (chu)this.MemberwiseClone();
        }
    }
    //原型里面帶引用對(duì)象,深度復(fù)制
    public class jia2 : IYunSuan
    {
        public tempObject temp;
        public jia2()
        {
            temp = new tempObject();
        }
        private jia2(tempObject _temp)
        {
            temp = (tempObject)_temp.Clone();
        }
        public override void getResult(int num1, int num2)
        {
            temp.num1 = num1;
            temp.num2 = num2;
            result = temp.num1 + temp.num2;
        }
        public void getTempResult(int num1, int num2)
        {
            temp.num1 = num1;
            temp.num2 = num2;            
        }
        public override object Clone()
        {
            jia2 j = new jia2(this.temp);            
            return j;
        }

    }
        //下面是原型工廠
        public interface IFactory
    {
        IYunSuan createYunSuanObj();
    }
    public class jiaFactory : IFactory
    {
        public IYunSuan createYunSuanObj()
        {
            return new jia();
        }
    }
    public class jianFactory : IFactory
    {
        public IYunSuan createYunSuanObj()
        {
            return new jian();
        }
    }
    public class chengFactory : IFactory
    {
        public IYunSuan createYunSuanObj()
        {
            return new cheng();
        }
    }
    public class chuFactory : IFactory
    {
        public IYunSuan createYunSuanObj()
        {
            return new chu();
        }
    }
    //深度復(fù)制
    public class jiaFactory2 : IFactory
    {
        public IYunSuan createYunSuanObj()
        {
            return new jia2();
        }
    }

        //前端
        static void Main(string[] args)
        {
            //IFactory factory = new jiaFactory();
            //var ajia = factory.createYunSuanObj();

            ///////第二個(gè)加法運(yùn)算,和第一個(gè)加法并行存在,一般做法
            //var ajia2 = factory.createYunSuanObj();//重新new了下構(gòu)造函數(shù)生成新的對(duì)象,

            ///////第二個(gè)加法運(yùn)算,和第一個(gè)加法并行存在,使用原型模式,淺復(fù)制
            //var ajia2 = (jia)ajia.Clone();//省略了new,在內(nèi)存里用流的方式復(fù)制生成新的對(duì)象.

            //ajia.getResult(1, 2);
            //ajia2.getResult(2, 3);
            //Console.WriteLine(ajia.result);            
            //Console.WriteLine(ajia2.result);
            //Console.ReadLine();

            ///////第二個(gè)加法運(yùn)算,和第一個(gè)加法并行存在,使用原型模式,原型里面有引用對(duì)象,深復(fù)制
            IFactory factory2 = new jiaFactory2();
            var my = (jia2)factory2.createYunSuanObj();

            var my2 = (jia2)my.Clone();

            my.getTempResult(1, 2);
            my2.getTempResult(2, 3);
            Console.WriteLine(my.temp.num1.ToString()+"-"+my.temp.num2.ToString());
            Console.WriteLine(my2.temp.num1.ToString() + "-" + my2.temp.num2.ToString());
            Console.ReadLine();

        }

總結(jié):用原型實(shí)例指定創(chuàng)建對(duì)象的種類(lèi),并且通過(guò)拷貝這些原型創(chuàng)建新的對(duì)象。
1、原型模式是以一個(gè)對(duì)象為原型,然后有復(fù)用的時(shí)候通過(guò)克隆的方式,重復(fù)出多個(gè)對(duì)象,一般情況下一個(gè)類(lèi)如果需要被用到,就會(huì)new出對(duì)個(gè)對(duì)象,原型模式的話(huà)只需要new一個(gè)原型,省略了new的過(guò)程,實(shí)際是在內(nèi)存中通過(guò)流的方式克隆了一塊相同的內(nèi)存空間,性能提升了很多;
2、對(duì)象中如果引用了其他對(duì)象,那么這個(gè)引用對(duì)象不能被克隆,除非深度復(fù)制,深度復(fù)制是把每一層的淺復(fù)制結(jié)合起來(lái),如果引用對(duì)象的層次太多,會(huì)很復(fù)雜。
3、原型模式用來(lái)優(yōu)化工廠方法模式是非常好的,工廠方法模式每一個(gè)產(chǎn)品對(duì)象對(duì)應(yīng)一個(gè)工廠,如果其中很多產(chǎn)品是相似的,那就會(huì)多出很多不必要的工廠,用原型模式復(fù)制一個(gè)產(chǎn)品,然后改變一下其中某些屬性,就成為了一個(gè)新的產(chǎn)品,這樣會(huì)特別省事省代碼還提高性能。

創(chuàng)新互聯(lián)建站一直在為企業(yè)提供服務(wù),多年的磨煉,使我們?cè)趧?chuàng)意設(shè)計(jì),營(yíng)銷(xiāo)型網(wǎng)站到技術(shù)研發(fā)擁有了開(kāi)發(fā)經(jīng)驗(yàn)。我們擅長(zhǎng)傾聽(tīng)企業(yè)需求,挖掘用戶(hù)對(duì)產(chǎn)品需求服務(wù)價(jià)值,為企業(yè)制作有用的創(chuàng)意設(shè)計(jì)體驗(yàn)。核心團(tuán)隊(duì)擁有超過(guò)10多年以上行業(yè)經(jīng)驗(yàn),涵蓋創(chuàng)意,策化,開(kāi)發(fā)等專(zhuān)業(yè)領(lǐng)域,公司涉及領(lǐng)域有基礎(chǔ)互聯(lián)網(wǎng)服務(wù)雅安機(jī)房托管、成都app軟件開(kāi)發(fā)、手機(jī)移動(dòng)建站、網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)絡(luò)整合營(yíng)銷(xiāo)。

設(shè)計(jì)模式-原型模式

設(shè)計(jì)模式-原型模式

新聞名稱(chēng):設(shè)計(jì)模式-原型模式
標(biāo)題來(lái)源:http://sd-ha.com/article24/gpsije.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、用戶(hù)體驗(yàn)、網(wǎng)站維護(hù)動(dòng)態(tài)網(wǎng)站、靜態(tài)網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

小程序開(kāi)發(fā)