工厂三姐妹中的最后升级是抽象工厂模式,现在我们来说说抽象工厂。
定义:
提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。
代码结构图:
现在我们假设这里有电脑的cpu和Ram,其中电脑的类别中分为Pc和Mac,则抽象中的结构图如下:
在这幅图中,逻辑是很明显的。
代码部分:
根据上面的关系,我们可以得到下面的具体的代码
interface Cpu
{
public Cpu()
{
}
}
interface Ram
{
public Ram()
{
}
}
//四个具体产品
public class PcCpu : Cpu
{
}
public class MacCpu : Cpu
{
}
public class PcRam : Ram
{
}
public class MacRam : Ram
{
}
//抽象工厂角色
public interface ComputerFactory
{
Cpu createCpu();
Ram createRam();
}
//两个具体工厂角色
public class PcProducer : ComputerFactory
{
public Cpu createCpu()
{
return new PcCpu();
}
public Ram createRam()
{
return new PcRam();
}
}
public class MacProducer : ComputerFactory
{
public Cpu createCpu()
{
return new MacCpu();
}
public Ram createRam()
{
return new MacRam();
}
}
}
工厂是一个产品的封装,而抽象工厂是对一系列相关产品的封装,俩者都是将实体对象和动作解耦,更有利于我们的以后的维护和修改。
反射技术:
在抽象工厂中引入了反射的概念,反射也就是把代码中的具体的固定的常量变成了变量。具体的格式是Assembly.load("程序集名称").CreateInstance("命名空间.类名称"),用字符串来实例化对象,变量是可以随时更新的,更加的灵活。
工厂在一步一步的升级,我们的学习也在逐步的深入。。。。。