设计模式解读之 简单工厂模式&工厂方法模式&抽象工厂模式(2)
2012-05-06 00:15
351 查看
上一篇写了简单的工厂模式的实现,但是他还是有一个弊端,就是实体类通过继承,在子类中实现具体的功能,这样很好的做到了功能的可扩展,但是工厂类却是在类中通过switch来判断,对不同功能类的实例化是写死在工程类中的,这样一旦需要宽展就会修改该类。现在看下面的解决方案。
当然有一种方法可以在这个工厂方法模式中,根据具体的需要自动判断需要实例化的功能类,那就是反射
在客户端调用的
现在把上面的
Factory factory = new FactoryLeg();
替换成这一条代码Factory factory = (Factory)Assembly.Load("FactoryPattern").CreateInstance("FactoryPattern.FactoryLeg");
其效果是一样一样的,但是大家看得出来这条代码是用字符串来指定的,这样就可以很轻松的将用户输入的字符串组合成参数从而来指定要实例化的功能类了,是不是很强大啊。
interface Animal { void Operate(); } class Leg : Animal { public void Operate() { Console.WriteLine("i am a leg i can run"); } } class Mouse : Animal { public void Operate() { Console.WriteLine("i am a mouse i can eat"); } } interface Factory { Animal CreateAnimal(); } class FactoryLeg : Factory { public Animal CreateAnimal() { return new Leg(); } } class FactoryMouse : Factory { public Animal CreateAnimal() { return new Mouse(); } } class Program { static void Main(string[] args) { Factory factory = new FactoryLeg(); Animal animal = factory.CreateAnimal(); animal.Operate(); Console.ReadKey(); } }这样就充分解决了上面提到的问题了,但是与此同时也有个相对于简单工厂模式的缺点,就是无法自动的选择去实例化那个功能类,这一点之前是在工厂类中的switch中做到的,看见这个设计模式也并非是完美的。
当然有一种方法可以在这个工厂方法模式中,根据具体的需要自动判断需要实例化的功能类,那就是反射
在客户端调用的
现在把上面的
Factory factory = new FactoryLeg();
替换成这一条代码Factory factory = (Factory)Assembly.Load("FactoryPattern").CreateInstance("FactoryPattern.FactoryLeg");
其效果是一样一样的,但是大家看得出来这条代码是用字符串来指定的,这样就可以很轻松的将用户输入的字符串组合成参数从而来指定要实例化的功能类了,是不是很强大啊。
相关文章推荐
- 设计模式解读之 简单工厂模式&工厂方法模式&抽象工厂模式(1)
- 设计模式解读之 简单工厂模式&工厂方法模式&抽象工厂模式(3)
- 结合实例分析简单工厂模式&工厂方法模式&抽象工厂模式的区别
- Java设计模式—工厂方法模式&抽象工厂模式
- 解读设计模式----抽象工厂模式(AbstractFactory Pattern)
- JAVA开发的23种设计模式之 --- 工厂模式 && 抽象工厂模式
- Java设计模式—工厂方法模式&抽象工厂模式
- 解读设计模式----抽象工厂模式(AbstractFactory Pattern)
- "围观"设计模式(8)--创建型之简单工厂模式、工厂方法模式、抽象工厂模式
- 设计模式C#描述——抽象工厂模式
- 解读设计模式----抽象工厂模式(AbstractFactory Pattern)
- "围观"设计模式(8)--创建型之简单工厂模式、工厂方法模式、抽象工厂模式
- Java设计模式—工厂方法模式&抽象工厂模式
- 设计模式学习之抽象工厂模式(二)<反射+配置文件>
- 说谎的简单工厂模式设计模式&工厂方法模式&Abstract Factory模式
- Java设计模式(3)之工厂方法模式&抽象工厂模式学习总结
- 设计模式之三——工厂方法模式(Factory Method)&抽象工厂模式(AbstractFacotry)
- java设计模式之"工厂方法模式"
- 设计模式- 简单工厂模式---->工厂方法模式---->抽象工厂模式
- JAVA设计模式(2) —<创建型>抽象工厂模式(Abstract Factory)