模型

< 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();
}
}
}
工厂方法虽然增加了额外的类,但是这样做是有好处的,例如:
