简单工厂模式
2016-06-07 19:50
281 查看
//1简单工厂模式
/*模式定义:
定义:
专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类或接口。
简单工厂模式又称为静态工厂方法(Static Factory Method)模式,属于类的创建型模式,
通常根据一个条件(参数)来返回不同的类的实例。
优缺点:
优点:
简单工厂模式能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。通过它,
外界可以从直接创建具体产品对 象的尴尬局面中摆脱出来。
外界与具体类隔离开来,偶合性低。
明确区分了各自的职责和权力,有利于整个软件体系结构的优化。
缺点:
工厂类集中了所有实例的创建逻辑,容易违反GRASPR的高内聚的责任分配原则
虽然简单工厂模式能够适应一定的变化,但是它所能解决的问题是远远有限的。
它所能创建的类只能是事先教考虑到的,如果需要添加新的类,则就需要改变工厂类了。
(这个问题在下一个工厂方法模式将得到很好的解决)
应用情景
工厂类负责创建的对象比较少
客户只知道传入了工厂类的参数,对于始何创建对象(逻辑)不关心
*/
namespace SimpleFactory
{
public class Operation//运算抽象类,定义抽象方法,用于子类重载。
{
public double NumberA{get;set;}
public double NumberB{get;set;}
public virtual double GetResult() {
double result = 0;
return result;
}
}
//以下为加减乘除四各类,采用继承方法,重写GertResult方法,并返回result(double类型)
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 OperationMulti:Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA * NumberB;
return result;
}
}
class OperationDiv:Operation
{
public override double GetResult()
{
if (NumberB==0)
{
throw new Exception("除数不能为0!");
}
else
{
double result = 0;
result = NumberA / NumberB;
return result;
}
}
}
}
//运算工厂类
namespace SimpleFactory
{
public class OperationFactory//改类与operation类之间是依赖关系。
{
public static Operation CreateOperate(string operate) {
Operation oper = null;
switch (operate)//根据字符串的不同,case判断产生不同的对象,以此实现简单工厂模式。
{
case "+":
oper = new OperationAdd();
break;
case "-":
oper = new OperationSub();
break;
case "*":
oper = new OperationMulti();
break;
case "/":
oper = new OperationDiv();
break;
default:
break;
}
return oper;
}
}
//客户端
Operation oper = new Operation();
oper = OperationFactory.CreateOperate("+");
oper.NumberA = 1;
oper.NumberB = 2;
double result=oper.GetResult();
Console.Read();
//1简单工厂模式
/*模式定义:
定义:
专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类或接口。
简单工厂模式又称为静态工厂方法(Static Factory Method)模式,属于类的创建型模式,
通常根据一个条件(参数)来返回不同的类的实例。
优缺点:
优点:
简单工厂模式能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。通过它,
外界可以从直接创建具体产品对 象的尴尬局面中摆脱出来。
外界与具体类隔离开来,偶合性低。
明确区分了各自的职责和权力,有利于整个软件体系结构的优化。
缺点:
工厂类集中了所有实例的创建逻辑,容易违反GRASPR的高内聚的责任分配原则
虽然简单工厂模式能够适应一定的变化,但是它所能解决的问题是远远有限的。
它所能创建的类只能是事先教考虑到的,如果需要添加新的类,则就需要改变工厂类了。
(这个问题在下一个工厂方法模式将得到很好的解决)
应用情景
工厂类负责创建的对象比较少
客户只知道传入了工厂类的参数,对于始何创建对象(逻辑)不关心
*/
namespace SimpleFactory
{
public class Operation//运算抽象类,定义抽象方法,用于子类重载。
{
public double NumberA{get;set;}
public double NumberB{get;set;}
public virtual double GetResult() {
double result = 0;
return result;
}
}
//以下为加减乘除四各类,采用继承方法,重写GertResult方法,并返回result(double类型)
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 OperationMulti:Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA * NumberB;
return result;
}
}
class OperationDiv:Operation
{
public override double GetResult()
{
if (NumberB==0)
{
throw new Exception("除数不能为0!");
}
else
{
double result = 0;
result = NumberA / NumberB;
return result;
}
}
}
}
//运算工厂类
namespace SimpleFactory
{
public class OperationFactory//改类与operation类之间是依赖关系。
{
public static Operation CreateOperate(string operate) {
Operation oper = null;
switch (operate)//根据字符串的不同,case判断产生不同的对象,以此实现简单工厂模式。
{
case "+":
oper = new OperationAdd();
break;
case "-":
oper = new OperationSub();
break;
case "*":
oper = new OperationMulti();
break;
case "/":
oper = new OperationDiv();
break;
default:
break;
}
return oper;
}
}
//客户端
Operation oper = new Operation();
oper = OperationFactory.CreateOperate("+");
oper.NumberA = 1;
oper.NumberB = 2;
double result=oper.GetResult();
Console.Read();
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- c#调用COM组件
- 设计模式之创建型模式
- 浅谈设计模式的学习
- C#实现把指定数据写入串口
- C#动态创建button的方法
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#实现给图片加水印的方法
- C#使用加边法计算行列式的值
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- C#中的delegate委托类型基本学习教程
- C#实现子窗体与父窗体通信方法实例总结
- C#通用邮件发送类分享
- Ruby设计模式编程之适配器模式实战攻略