设计模式解读之 简单工厂模式&工厂方法模式&抽象工厂模式(2)
来源:互联网 发布:局域网远程协助软件 编辑:程序博客网 时间:2024/04/30 22:06
上一篇写了简单的工厂模式的实现,但是他还是有一个弊端,就是实体类通过继承,在子类中实现具体的功能,这样很好的做到了功能的可扩展,但是工厂类却是在类中通过switch来判断,对不同功能类的实例化是写死在工程类中的,这样一旦需要宽展就会修改该类。现在看下面的解决方案。
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");
其效果是一样一样的,但是大家看得出来这条代码是用字符串来指定的,这样就可以很轻松的将用户输入的字符串组合成参数从而来指定要实例化的功能类了,是不是很强大啊。
- 设计模式解读之 简单工厂模式&工厂方法模式&抽象工厂模式(2)
- 设计模式解读之 简单工厂模式&工厂方法模式&抽象工厂模式(1)
- 设计模式解读之 简单工厂模式&工厂方法模式&抽象工厂模式(3)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- java设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- 设计模式理解之工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- 设计模式 - 工厂模式(简单,工厂方法,抽象工厂)
- 设计模式-工厂模式(简单工厂,工厂方法,抽象工厂)
- 设计模式之工厂模式(简单工厂,工厂方法,抽象工厂)
- Java设计模式之工厂模式(简单工厂、工厂方法、抽象工厂)
- 设计模式之--工厂模式详解(简单工厂、工厂方法、抽象工厂)
- hibernate 三 多对一
- android UI进阶之用ViewPager实现欢迎引导页面
- 让默认安装的Linux支持中文
- DIRECTORY_SEPARATOR和PATH_SEPARATOR的用法
- Apple 等六大生态系统的崛起
- 设计模式解读之 简单工厂模式&工厂方法模式&抽象工厂模式(2)
- Apache 对JDK封装的很实用的类
- GIS开源库shapeLib的使用方法(一)
- GIS开源库shapeLib的使用方法(二)
- 记录点滴10
- 依靠自己
- 12_traffic_timer_int(改)
- spring 3 jar包依赖关系
- 实现了一个压缩算法,在数据高度压缩的前提下,还可以快速查找 key