首页 > 其他分享 >小菜学设计模式 工厂设计模式 Simple Factory Pattern

小菜学设计模式 工厂设计模式 Simple Factory Pattern

时间:2023-03-22 12:07:20浏览次数:52  
标签:oper return Simple Pattern result double Operation 设计模式 public


设计模式的工厂设计模式。


工厂模式有以下几种形态:

  • 简单工厂(Simple Factory)模式
  • 工厂方法(Factory Method)模式
  • 抽象工厂(Abstract Factory)模式

优点:
工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅"消费"产品。简单工厂模式通过这种做法实现了对责任的分割。

缺点:
当产品有复杂的多层等级结构时,工厂类只有自己,以不变应万变,就是模式的缺点。因为工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。

同时,系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,有可能造成工厂逻辑过于复杂。

另外,简单工厂模式通常使用静态工厂方法,这使得无法由子类继承,造成工厂角色无法形成基于继承的等级结构。以上描述来自:​​C#设计模式(4)-Simple Factory Pattern​​

 

前台调用时使用:

class Program
{
static void Main(string[] args)
{
try
{
Console.Write("请输入数字A:");
string strNumberA = Console.ReadLine();
Console.Write("请选择运算符号(+、-、*、/):");
string strOperate = Console.ReadLine();
Console.Write("请输入数字B:");
string strNumberB = Console.ReadLine();
string strResult = "";

Operation oper;
oper = OperationFactory.createOperate(strOperate);
oper.NumberA = Convert.ToDouble(strNumberA);
oper.NumberB = Convert.ToDouble(strNumberB);
strResult = oper.GetResult().ToString();

Console.WriteLine("结果是:" + strResult);

Console.ReadLine();


}
catch (Exception ex)
{
Console.WriteLine("您的输入有错:" + ex.Message);
}
}
}

 

操作实体类Operation和运算类工厂:

using System;
using System.Collections.Generic;
using System.Text;

namespace OperationLibrary
{
/// /// 运算类
///
public class Operation
{
private double _numberA = 0;
private double _numberB = 0;

/// /// 数字A
///
public double NumberA
{
get
{
return _numberA;
}
set
{
_numberA = value;
}
}

/// /// 数字B
///
public double NumberB
{
get
{
return _numberB;
}
set
{
_numberB = value;
}
}

/// /// 得到运算结果
///
///

public virtual double GetResult()
{
double result = 0;
return result;
}

/// /// 检查输入的字符串是否准确
///
///
///
///

public static string checkNumberInput(string currentNumber, string inputString)
{
string result = "";
if (inputString == ".")
{
if (currentNumber.IndexOf(".") < 0)
{
if (currentNumber.Length == 0)
result = "0" + inputString;
else
result = currentNumber + inputString;
}
}
else if (currentNumber == "0")
{
result = inputString;
}
else
{
result = currentNumber + inputString;
}

return result;
}


}

/// /// 加法类
///
class OperationAdd : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA + NumberB;
return result;
}
}

/// /// 减法类
///
class OperationSub : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA - NumberB;
return result;
}
}

/// /// 乘法类
///
class OperationMul : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA * NumberB;
return result;
}
}

/// /// 除法类
///
class OperationDiv : Operation
{
public override double GetResult()
{
double result = 0;
if (NumberB == 0)
throw new Exception("除数不能为0。");
result = NumberA / NumberB;
return result;
}
}

/// /// 平方类
///
class OperationSqr : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberB * NumberB;
return result;
}
}

/// /// 平方根类
///
class OperationSqrt : Operation
{
public override double GetResult()
{
double result = 0;
if (NumberB < 0)
throw new Exception("负数不能开平方根。");
result = Math.Sqrt(NumberB);
return result;
}
}

/// /// 相反数类
///
class OperationReverse : Operation
{
public override double GetResult()
{
double result = 0;
result = -NumberB;
return result;
}
}

/// /// 运算类工厂
///
public class OperationFactory
{
public static Operation createOperate(string operate)
{
Operation oper = null;
switch (operate)
{
case "+":
{
oper = new OperationAdd();
break;
}
case "-":
{
oper = new OperationSub();
break;
}
case "*":
{
oper = new OperationMul();
break;
}
case "/":
{
oper = new OperationDiv();
break;
}
case "sqr":
{
oper = new OperationSqr();
break;
}
case "sqrt":
{
oper = new OperationSqrt();
break;
}
case "+/-":
{
oper = new OperationReverse();
break;
}
}

return oper;
}
}

}
类似的结构图。



参考学习:​​C#设计模式(4)-Simple Factory Pattern​​

标签:oper,return,Simple,Pattern,result,double,Operation,设计模式,public
From: https://blog.51cto.com/dupeng0811/6142340

相关文章

  • 小菜学设计模式 单一职责原则
    单一职责原则:就一个类而言,应该仅有一个引起它变化的原因!如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。......
  • 前端设计模式——模板方法模式
    模板方法模式(TemplateMethodPattern):定义一个行为的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个行为的结构即可重定义该行为的某些特定步骤。这些步......
  • go 常用设计模式-结构型模式
    本次分享结构型模式,主要包括:代理模式装饰器模式适配器模式享元模式1.代理模式packageproxyimport"fmt"/*结构型模式代理,代表打理,以他人的名义代表委托人......
  • go 常用设计模式-行为型模式
    本次分享的行为型模式,主要包含:责任链模式策略模式观察者模式模板模式访问者模式1.责任链模式packagechainOfResponsibilityimport"fmt"/*行为模式:通过账......
  • C#转换int列表到字符串Convert simple int array to string C#
    在netframework中已经有现成的类库可以解决这个问题了。Join(String,IEnumerable<String>)串联类型为[IEnumerable]的[String]构造集合的成员,其中在每个成员之间使用指......
  • 前端设计模式——状态模式
    状态模式(StatePattern):将对象的行为和状态分离,使得对象可以根据不同的状态来改变自己的行为。在前端开发中,可以使用状态模式来管理页面的状态和响应用户的交互。在状态模......
  • 前端设计模式——桥接模式
    桥接模式(BridgePattern)是一种结构型设计模式,用于将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构,从而能够更好地组合和扩展这些类。在前端开发中,桥接......
  • 设计模式(二十六)----行为型模式之备忘录模式
    1概述备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,当新的状态无效或者存在问题时,可以使用暂时存储起来的备忘录将状态复原,很多软件......
  • 博客园主题美化(SimpleMemory 主题)
    参考地址:https://cloud.tencent.com/developer/article/1953331文档参考:https://bndong.github.io/Cnblogs-Theme-SimpleMemory/v1.1/#/**window.cnblogsConfig配置详情......
  • 前端设计模式——过滤器模式
    前端设计模式中的过滤器模式(FilterPattern)是一种结构型设计模式,它允许我们使用不同的条件来过滤一组对象,并返回符合条件的对象列表。在过滤器模式中,我们有一个包含多个对......