工厂方法

2014-11-24 01:25:33 · 作者: · 浏览: 0

模型

\


< http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+ICAgPC9wPgo8cD48L3A+CjxwPrmks6e3vbeoxKPKvShmYWN0b3J5IG1ldGhvZCmjurao0uXSu7j208PT2rS0vai21M/ztcS907/ao6zIw9fTwOC+9raoyrXA/buvxMTSu7j2wOCho7mks6e3vbeoysfSu7j2wOC1xMq1wP27r9HTs9m1vcbk19PA4KGjPC9wPgo8cD48YnI+CjwvcD4KPHA+uaSzp7e9t6i6zbzytaW5pLOnt723qL+0xvDAtLTzsr+31srH0rvR+bXEo6zWu8rH1Nq5pLOn1eLA76OsvPK1pbmks6fKx82ouf1Td2l0Y2jT777kvfjQ0NGh1PHIu7rzyrXA/buvttTP86OstvjU2rmks6e3vbeowO/D5qOsttS5pLOnvfjSu7K9s+nP86OstqjS5cHL0ru49rmks6e907/ao6zIw8O/0rvA4LL6xre21NOm0ru49rmks6e907/ao6zU2sq1wP27r77fzOWy+sa3tcTKsbryo6zSqs2ouf3Ktc/WuaSzp73Tv9q1xMDgvfjQ0KGjPC9wPgo8cD48YnI+CjwvcD4KPHA+wb3W1re9t6i1xLHIvc+jujwvcD4KPHA+ICAguaSzp7e9t6i/y7f+wcu88rWluaSzp86lsbO/qrfFoaq34rHV1K3U8rXEyLG146Os09axo7PWwcu34tewttTP87S0vai5/bPMtcTTxbXjoaM8L3A+CjxwPiAgIMv8w8e2vMrHvK/W0Lfi17DBy7bUz/O1xLS0vaijrMq5tcPSqrj8u7u21M/zyrGjrLK70OjSqtf2tPO1xLjEtq++zb/JyrXP1qOsvbW1zcHLv827p7PM0PLT67L6xre21M/ztcTx7rrPoaO5pLOnt723qMSjyr3Kx7zytaW5pLOnxKPKvbXEvfjSu7K9s+nP87rNzca546Gj08nT2sq508PBy7bgzKzQ1KOsuaSzp7e9t6jEo8q9saOz1sHLvPK1pbmks6fEo8q9tcTTxbXjo6y2+MfSv8u3/sHLy/y1xMixteOho7WryLG148rH08nT2sO/vNPSu7j2svrGt6Osvs3Q6NKqvNPSu7j2svrGt7mks6e1xMDgo6zU9rzTwcu27s3itcS/qreiwb+hozwvcD4KPHA+PGJyPgo8L3A+CjxoMT4gIArKvsD9PC9oMT4KPHA+ICAgICAgICAgINTa0afPsLzytaW5pLOntcTKsbryo6zO0tC0uf3Su7j2Q1BVyfqy+rXEwP3X06OovPK1pbmks6fEo8q9o6mjrM/W1Nqw0dXiuPbA/dfTydS807jEtq+jrMv8vs2zycHLuaSzp7e9t6i1xMD919Oho8jnzbyjujwvcD4KPHA+ICA8aW1nIHNyYz0="https://www.cppentry.com/upload_files/article/76/1_kbfeo__.jpg" alt="\">


在这里,将工厂类去掉,但是抽象出来Client接口,并让3个具体的工厂方法去实现这个接口。也就是说,用子类的Client8085,Client8080,Client8086去决定实例化哪一个类。通过这样的改动,将一个类的实例化延迟到了其子类。


代码如下:


namespace 生产CPU
{
    public class Cpu8086 : CPU  //8086CPU
    {
        public Cpu8086()
        {
            this.size = "8086";
            Console.WriteLine("生产的是8086CPU。");
        }


    }

    public class Cpu8080 : CPU  //8080CPU
    {
        public Cpu8080()
        {
            this.size = "8080";
            Console.WriteLine("生产的是8080CPU。");
        }


    }

    public class Cpu8085 : CPU  //8085CPU
    {
        public Cpu8085()
        {
            this.size = "8085";
            Console.WriteLine("生产的是8085CPU。");
        }


    }


    public class CPU  //CPU类
    {
        private string Size;

        public string size
        {
            get { return Size; }
            set { Size = value; }
        }


    }
     
    interface Client   //定义一个选择生产CPU的接口(客户的抽象)
    {
        CPU ChooseCpu();

    }

    class Client8086 : Client   //生产8086CPU的工厂类
    {
        public CPU ChooseCpu()
        {
            return new Cpu8086();
        }
    }

    class Client8085 : Client  //生产8085CPU的工厂类
    {
        public CPU ChooseCpu()
        {
            return new Cpu8085();
        }
    }

    class Client8080 : Client   //生产8080CPU的工厂类
    {
        public CPU ChooseCpu()
        {
            return new Cpu8080();
        }
    }


    class Program
    {
        static void Main(string[] args)
        {
            Client client = new Client8080();  //生产8080CPU
            CPU CpuType = client.ChooseCpu();   
        }
    }
}

工厂方法虽然增加了额外的类,但是这样做是有好处的,例如: