工厂模式
来源:互联网 发布:js三大家族 编辑:程序博客网 时间:2024/05/28 16:07
关于简单工厂,
今天稍微写一下。
举个简单的例子。
假设我们需要根据命令,输出 “Hello ClassA”或者 “Hello ClassB”
一般我们这么做~
根据用户输入来选择,或者根据类型来选择,(用if/else 或者 switch随便你,但这不是本文的重点!)
string str=Console.ReadLine(); if (str == "ClassA") { Console.WriteLine("Hello ClassA"); } else if (str == "ClassB") { Console.WriteLine("Hello ClassB"); } else { }
如果代码需要更改,增加一个 ClassC,那么我们不得不继续增加一个 else if
由于以上问题,我们终于衍生出了工厂模式
首先我们创建一个 抽象的基类~哈哈。
写一个抽象方法。就是用来打印文字。
public abstract class BaseClass { public abstract void WriteStr(); }
让他们继承BaseClass基类,并且实现了当中的
WriteStr()方法,哈哈
public class ClassA : BaseClass { public override void WriteStr() { Console.WriteLine("Hello ClassA"); } } public class ClassB : BaseClass { public override void WriteStr() { Console.WriteLine("Hello ClassB"); } }
BaseClass b = new ClassA(); BaseClass b1 = new ClassB(); b.WriteStr(); //输出:Hello ClassA b1.WriteStr(); //输出:Hello ClassB
是不是很简单?根据子类引用,获得不同的对象。然后输出对应的字符串~
但是!!!但是,兄弟们啊,既然都做到这一步了。那我们在稍微多做一步啊。。。虽然上面看似差不多了。
但也只是差不多而已。。。
说白了,工厂模式,就是为了减少维护工作,是class对外禁止修改,扯一大堆。。。。我觉得就是减少代码量。好维护。。。就这样。
继续继续。
我们在上面的代码中,继续写下:
这里就是根据传入的T,创建不同的ClassA或者 ClassB
public class Class2 { public virtual T CreateClass<T>() where T : BaseClass, new() { T obj = new T(); return obj; } }
调用代码:
public static void Main(string[] args) { BaseClass b = new Class2().CreateClass<ClassB>(); b.WriteStr(); Console.ReadLine(); }
好啦,就这么完成了,其实很简单。
宗旨就是,我们将多个有关联的同种类Class继承自一个基类:BaseClass。
然后实现他们共有的方法,
最后通过ClassCreate来创建实例对象。
这样,在以后如果还存在 ClassC的时候,我们只需要增加一个新的Class,而不是去修改代码。就可以啦~~~
0 0
- 工厂模式 -- 工厂方法
- 工厂模式 -- 抽象工厂
- 工厂模式-简单工厂
- 工厂模式-工厂方法
- 工厂模式:静态工厂
- 工厂模式-简单工厂
- 工厂模式-抽象工厂
- 工厂模式-工厂方法
- 工厂 > 工厂方法模式
- 工厂模式-静态工厂
- 工厂模式-抽象工厂
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- LeetCode(228) Summary Ranges
- 使用的主要开源技术
- 成熟是什么
- 对 Linux 初级、中级、高级用户非常有用的 60 个命令
- unsafe 库使用小结
- 工厂模式
- JavaEE_JavaScript__前台(Jsp页面) + 后台数据处理(Servlet),与javaScript的过程的处理
- JScrollPane控件中添加其他控件的问题&&JScrollPane设置滚动条&&调整滚动速度
- VC++向txt文件中写入字符串
- 动态网站开发技术学习3:ASP.NET内置对象之Response对象
- 重装mysql安装最后一项的apply security settings 总是不能进行。提示error nr.1045然后就是access denied for user 'root' @'loca
- Eclipse快捷键大全
- android volley problem
- c/c++中main方法中的return值 & 参数 & 剪切