工厂模式vs简单工厂
2024-10-07 13:43:51
前言
工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择动态实例化相关类,对于客户端来说,去除了与具体产品的依赖。例如:计算器,只需要把“+”、“-”等给客户端,然后传入工厂,工厂就自动给出了相应的实例,但问题就这里,如果添加一个“*”的功能,我们一定要给工厂类的方法加‘case’判断的,修改原有的类?这就违背了开-闭原则。
1、公共类
/// <summary>
/// 这个人会挣钱,会开公司,男人,女人都要学习
/// </summary>
public class MaYun
{
public void Money()
{
Console.WriteLine("挣钱");
}
public void Company()
{
Console.WriteLine("开公司"); }
}
public class Man : MaYun
{ }
public class Woman : MaYun
{ }
二、简单工厂
工厂类:
public class SimpleFactory
{
public static MaYun CreateMaYun(string type)
{
MaYun m = null;
switch (type)
{
case "Man":
m = new Man();
break;
case "Woman":
m = new Woman();
break;
default:
break; }
return m;
}
}
客户端:
class Program
{
static void Main(string[] args)
{
#region 简单工厂
MaYun man1 = SimpleFactory.CreateMaYun("Man");
man1.Money();
man1.Company();
MaYun woman1 = SimpleFactory.CreateMaYun("Woman");
woman1.Money();
woman1.Company();
#endregion
}
}
三、工厂
定义工厂接口,并让男人的工厂和女人的工厂类继承该接口
public interface IFactory
{
MaYun CreateMaYun();
}
public class ManFactory : IFactory
{
public MaYun CreateMaYun()
{
return new Man();
}
}
public class WomanFactory : IFactory
{
public MaYun CreateMaYun()
{
return new Woman();
}
}
客户端:
class Program
{
static void Main(string[] args)
{ #region 工厂
//要修改为woman,只需修改 IFactory factory = new WoManFactory();
IFactory factory = new ManFactory();
MaYun mm = factory.CreateMaYun();
mm.Company();
mm.Money();
#endregion
}
}
总结:
1、尽管如果换成‘woman类’或者其他子类,还是要修改代码的,但只需要修改一处就可以了。
2、工厂模式克服了简单工厂违背开-闭原则的缺点,又保持了封装对象创建过程的优点。
参考书籍:大话设计模式
最新文章
- 替换url中某个参数的值或是添加某个参数的方法(js 分页上下页可以使用)
- HTML5本地存储 Web Storage
- oracle本机登录不上dba的权限不足错误
- [最近公共祖先] POJ 1330 Nearest Common Ancestors
- netbeans项目中排除node_modules文件夹
- OpenCV学习笔记——多种Smooth平滑处理
- SqlSever基础 len函数 返回一个字符串的长度
- javascript 10进制和64进制的转换
- HtmlWebpackPlugin实现资源的自定义插入
- swift 学习之自动引用计数
- [LeetCode] 22. 括号生成
- 发布python模块
- Architectural principles
- Java15-java语法基础(十五)——内部类
- Oracle11g的database 和client的区别是什么?
- STL其他--<;tuple>;用法【C11】
- postman学习笔记(二)
- Linux/CentOS关闭图形界面(X-window)和启用图形界面命令
- 开始使用ARC
- 洛谷P4424 寻宝游戏 [HNOI/AHOI2018]