学习设计模式-简单工厂模式
前言
学习记录设计模式的博客文档,后续将会整理成一个专栏进行分类
何为-简单工厂模式
定义:定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类
简单工厂模式说明介绍
那我们生活中常见的万达为例进行说明,
万达这个整体,就是万达内部多家门店的共同父类。
我们每一个进入购物的人 就当作一个变量信息,进入了万达 你可以搜寻适合你的商品,衣服,礼物 进行购买。
直到最后出了万达 ,带着你满满的战利品出去。
整体一个效果 可以简单理解成一个简单工厂模式的流程信息。
简单工厂模式代码展示
/// <summary>
/// 万达抽象类
/// </summary>
public abstract class WanDa
{
// 去万达干了啥
public abstract void Print();
}
/// <summary>
/// 买食物
/// </summary>
public class BuyFoot : WanDa
{
public override void Print()
{
Console.WriteLine("买食物");
}
}
/// <summary>
/// 买衣服
/// </summary>
public class BuyClothes: WanDa
{
public override void Print()
{
Console.WriteLine("买衣服");
}
}
/// <summary>
/// 简单工厂类, 万达商场
/// </summary>
public class SimpleFactory
{
public static Wanda Shoping(string people)
{
Wanda wd = null;
if (people.Equals("买食物"))
{
wd = new BuyFoot();
}
else if (people.Equals("买衣服"))
{
wd = new BuyClothes();
}
//或者
switch(people)
{
case "买食物":
wd = new BuyFoot();
break;
case "买衣服":
wd = new BuyClothes();
break;
}
return wd ;
}
}
/// <summary>
/// 顾客充当客户端,负责调用简单工厂来生产对象
/// 即客户购物,万达(相当于简单工厂)负责展示(生产的对象)
/// </summary>
class Customer
{
static void Main(string[] args)
{
// 客户买食物
WanDa wd1= SimpleFactory.Shoping("买食物");
wd1.Print();
// 客户买衣服
WanDa wd2= SimpleFactory.Shoping("买衣服");
wd2.Print();
Console.Read();
}
}
优点与缺点
优点:
1.简单工厂模式解决了客户端直接依赖于具体对象的问题,客户端可以消除直接创建对象的责任,而仅仅是消费产品。简单工厂模式实现了对责任的分割。
2.简单工厂模式也起到了代码复用的作用.相同的产品 可以展示给不同的人去看,去选择。
缺点:
1.工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都会受到影响(通俗地意思就是:一旦万达关门了,很多店家就没卖东西的位置了)
2.系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,这样就会造成工厂逻辑过于复杂。(万达格局不会轻易扩展增加门店)
应用场景:
1.当工厂类负责创建的对象比较少时或者固定的选项时可以考虑使用简单工厂模式()
2.客户如果只知道传入工厂类的参数,对于如何创建对象的逻辑不关心时可以考虑使用简单工厂模式
尾语
简单工厂模式,最简单的理解方式的话就是就最简单的 点—点的处理
增加中转处理 变成 点—工厂—点
逻辑判断放在了工厂中进行处理
文章参考来源: