设计模式--简单工厂模式 策略模式
2008-08-29 10:19
281 查看
名词理解:
工厂(Factory)模式我们可以做如下理解,假设有一个Audi的公司生产汽车(似乎也不用假设了),它掌握一项核心的技术就是生产汽车,另一方面,它生产的汽车是有不同型号的,并且在不同的生产线上进行组装。当客户通过销售部门进行预定后,Audi公司将在指定的生产线上为客户生产出它所需要的汽车。
策略(Strategy)模式在结构上与工厂模式类似,唯一的区别是工厂模式实例化一个产品的操作是在服务端来做的,换句话说客户端传达给服务端的只是某种标识,服务端根据该标识实例化一个对象。而策略模式的客户端传达给服务端的是一个实例,服务端只是将该实例拿过去在服务端的环境里执行该实例的方法。这就好比一个对汽车不甚了解的人去买车,他在那一比划,说要什么什么样的,销售部门根据他的这个“比划”来形成一份订单,这就是工厂模式下的工作方式。而策略模式下那个顾客就是个行家,他自己给出了订单的详细信息,销售部门只是转了一下手就交给生产部门去做了。通过两相对比,我们不难发现,采用工厂模式必须提供足够灵活的销售部门,如果用户有了新的需求,销售部门必须马上意识到这样才可以做出合适的订单。所以倘一款新车出来了,生产部门和销售部门都需要更新,对顾客来说也需要更新对新车的描述所以需要改动的地方有三处。而策略模式中的销售部门工作比较固定,它只负责接受订单并执行特定的几个操作。当一款新车出来时,只需要对服务端的生产部门和客户端的代码进行更新,而不需要更新销售部门的代码。
技术支持:
简单工厂和策略的基础都是因为面向对象的封装与多态。他们实现的思想都是先设定一个抽象的模型并从该模型派生出符合不同客户需求的各种方法,并加以封装。
模型:
Audi公司的产品有A6, A4, TT, R8...我们如果将每种车的生产做一个方法,那么我们的模型结构应该是这样的
Code
namespace ConsoleApplication5
{
class Customer
{
static void Main(string[] args)
{
//This part is the customer part code for simple factory pattern
Console.WriteLine("Please select your car from 'A6', 'A4', 'R8'");
string strTemp = Console.ReadLine();
SelectCarFactoryPattern.OrderCar(strTemp);
//This part is the customer part code for strategy pattern
SelectCarStrategyPattern scstrategy = new SelectCarStrategyPattern(new A4Factory());
scstrategy.OrderCar();
}
}
}
[/code]
工厂(Factory)模式我们可以做如下理解,假设有一个Audi的公司生产汽车(似乎也不用假设了),它掌握一项核心的技术就是生产汽车,另一方面,它生产的汽车是有不同型号的,并且在不同的生产线上进行组装。当客户通过销售部门进行预定后,Audi公司将在指定的生产线上为客户生产出它所需要的汽车。
策略(Strategy)模式在结构上与工厂模式类似,唯一的区别是工厂模式实例化一个产品的操作是在服务端来做的,换句话说客户端传达给服务端的只是某种标识,服务端根据该标识实例化一个对象。而策略模式的客户端传达给服务端的是一个实例,服务端只是将该实例拿过去在服务端的环境里执行该实例的方法。这就好比一个对汽车不甚了解的人去买车,他在那一比划,说要什么什么样的,销售部门根据他的这个“比划”来形成一份订单,这就是工厂模式下的工作方式。而策略模式下那个顾客就是个行家,他自己给出了订单的详细信息,销售部门只是转了一下手就交给生产部门去做了。通过两相对比,我们不难发现,采用工厂模式必须提供足够灵活的销售部门,如果用户有了新的需求,销售部门必须马上意识到这样才可以做出合适的订单。所以倘一款新车出来了,生产部门和销售部门都需要更新,对顾客来说也需要更新对新车的描述所以需要改动的地方有三处。而策略模式中的销售部门工作比较固定,它只负责接受订单并执行特定的几个操作。当一款新车出来时,只需要对服务端的生产部门和客户端的代码进行更新,而不需要更新销售部门的代码。
技术支持:
简单工厂和策略的基础都是因为面向对象的封装与多态。他们实现的思想都是先设定一个抽象的模型并从该模型派生出符合不同客户需求的各种方法,并加以封装。
模型:
Audi公司的产品有A6, A4, TT, R8...我们如果将每种车的生产做一个方法,那么我们的模型结构应该是这样的
Code
namespace ConsoleApplication5
{
class Customer
{
static void Main(string[] args)
{
//This part is the customer part code for simple factory pattern
Console.WriteLine("Please select your car from 'A6', 'A4', 'R8'");
string strTemp = Console.ReadLine();
SelectCarFactoryPattern.OrderCar(strTemp);
//This part is the customer part code for strategy pattern
SelectCarStrategyPattern scstrategy = new SelectCarStrategyPattern(new A4Factory());
scstrategy.OrderCar();
}
}
}
[/code]
相关文章推荐
- 设计模式学习之策略模式和简单工厂模式的区别和联系
- 设计模式之_简单工厂模式、工厂方法模式、抽象工厂模式 、策略模式、策略与工厂的区别(转)
- 设计模式之——简单工厂模式与策略模式
- 简单工厂模式 策略模式【设计模式】【学习总结】
- 设计模式学习之简单工厂模式和策略模式
- 设计模式学习之策略模式和简单工厂模式的区别和联系
- 设计模式学习之简单工厂模式和策略模式
- PHP设计模式实例之(观察者模式、策略模式、简单工厂模式)
- java设计模式之策略模式和简单工厂模式
- 设计模式之简单工厂模式,工厂模式,策略模式
- 浅谈设计模式之简单工厂模式与策略模式
- 设计模式(一):策略模式+简单工厂模式
- 【设计模式】二 、策略模式及与简单工厂模式的区别
- 设计模式之策略模式&简单工厂模式
- 设计模式之策略模式&简单工厂模式
- 设计模式之简单工厂模式和策略模式总结
- 设计模式--简单工厂模式 策略模式
- 设计模式-简单工厂模式和策略模式
- PHP设计模式实例之(观察者模式、策略模式、简单工厂模式)
- 设计模式之策略模式(包含与简单工厂模式的区别,实现了超市结账系统)