设计模式读书笔记(五)——工厂方法模式
来源:互联网 发布:mac chrome去广告插件 编辑:程序博客网 时间:2024/06/02 12:07
一、动机
1、 在软件系统中,经常面临着“某个对象”的创建工作;由于需求的变化,这个对象面临着剧烈的变化,但是它们却拥有比较稳定的接口;
2、如何应对这种变化,如何提供一种“封装”机制隔离出“这个易变对象的变化”,从而保持系统中其他“依赖此对象的对象”不随着需求的变化而变化;
二、代码
AbstractCar.cs:
namespace FactoryMethod
...{
/**//// <summary>
/// Car 的摘要说明。
/// </summary>
public abstract class AbstractCar
...{
Enigee enigee;
public abstract void StarUp();
public abstract void Run();
public abstract void Turn(Direction direction);
public abstract void Stop();
}
}
...{
/**//// <summary>
/// Car 的摘要说明。
/// </summary>
public abstract class AbstractCar
...{
Enigee enigee;
public abstract void StarUp();
public abstract void Run();
public abstract void Turn(Direction direction);
public abstract void Stop();
}
}
CarFactory.cs:
namespace FactoryMethod
...{
/**//// <summary>
/// CarFactory 的摘要说明。
/// </summary>
public abstract class CarFactory
...{
public AbstractCar CreateCar();
}
}
...{
/**//// <summary>
/// CarFactory 的摘要说明。
/// </summary>
public abstract class CarFactory
...{
public AbstractCar CreateCar();
}
}
HongQiCar.cs:
namespace FactoryMethod
...{
/**//// <summary>
/// HongQiCar 的摘要说明。
/// </summary>
public class HongQiCar:AbstractCar
...{
public override void StarUp()
...{
}
public override void Run()
...{
}
public override void Turn(Direction direction)
...{
}
public override void Stop()
...{
}
}
}
...{
/**//// <summary>
/// HongQiCar 的摘要说明。
/// </summary>
public class HongQiCar:AbstractCar
...{
public override void StarUp()
...{
}
public override void Run()
...{
}
public override void Turn(Direction direction)
...{
}
public override void Stop()
...{
}
}
}
HongQiCarFactory.cs:
namespace FactoryMethod
...{
/**//// <summary>
/// HongQiCarFactory 的摘要说明。
/// </summary>
public class HongQiCarFactory:CarFactory
...{
public override AbstractCar CreateCar()
...{
return new HongQiCar();
}
}
}
...{
/**//// <summary>
/// HongQiCarFactory 的摘要说明。
/// </summary>
public class HongQiCarFactory:CarFactory
...{
public override AbstractCar CreateCar()
...{
return new HongQiCar();
}
}
}
CarTestFramework.cs:
namespace FactoryMethod
...{
/**//// <summary>
/// CarTestFramework 的摘要说明。
/// </summary>
public class CarTestFramework
...{
public void BuildTestContext(AbstractCar car)
...{
car.StarUp();
}
public void DoTest(AbstractCar car)
...{
car.Run();
}
public TestData GetTestData()
...{
}
}
}
...{
/**//// <summary>
/// CarTestFramework 的摘要说明。
/// </summary>
public class CarTestFramework
...{
public void BuildTestContext(AbstractCar car)
...{
car.StarUp();
}
public void DoTest(AbstractCar car)
...{
car.Run();
}
public TestData GetTestData()
...{
}
}
}
App.cs:
namespace FactoryMethod
...{
/**//// <summary>
/// App 的摘要说明。
/// </summary>
public class App
...{
public void Main()
...{
CarTestFramework carTestFramework=new CarTestFramework();
carTestFramework.BuildTestContext(new HongQiCarFactory());
}
}
}
...{
/**//// <summary>
/// App 的摘要说明。
/// </summary>
public class App
...{
public void Main()
...{
CarTestFramework carTestFramework=new CarTestFramework();
carTestFramework.BuildTestContext(new HongQiCarFactory());
}
}
}
三、代码分析
这里我主要强调的是工厂方法模式主要是面临着“某个对象”变化时适用。
也许大家会觉得抽象工厂模式、生成器模式与工厂方法模式非常相似,下面谈谈它们的不同之处:
抽象工厂模式解决的是“系列对象”的需求变化;生成器模式解决的是“对象部分”的需求变化;工厂方法模式解决的是“单个对象”的需求变化。
任何模式都有一个变化和不变的地方,应用模式就是要封装变化点,下面我列出这三种模式变化与不变的地方:
抽象工厂模式 生成器模式 工厂方法模式 不变点 接口 整体接口(如房屋) 接口 变化点 系列对象 对象部分(如门、窗等) 单个对象
- 设计模式读书笔记(五)——工厂方法模式
- 《Android源码设计模式解析与实战》读书笔记(五)——工厂方法模式
- 设计模式(五)——工厂方法模式
- 设计模式—工厂模式(五)
- 设计模式(五):工厂方法模式
- 设计模式(五):工厂方法模式
- 《读书笔记》设计模式——工厂方法模式
- Android设计模式读书笔记——工厂方法模式
- 五、工厂方法模式——设计模式学习笔记
- 设计模式读书笔记-----工厂方法模式
- 设计模式读书笔记-----工厂方法模式
- 设计模式读书笔记-----工厂方法模式
- 设计模式读书笔记-----工厂方法模式
- 设计模式(五)——工厂模式(Factory Method)
- 设计模式系列(五)——抽象工厂模式
- 设计模式(五)——抽象工厂模式
- 设计模式(五)——抽象工厂模式
- 读书笔记-设计模式(二)之工厂方法模式
- 一个带年月日时分秒选择的js脚本
- 现今最常见的若干种语言
- 是使用 ASP.NET Web 服务还是使用 .NET Remoting:如何选择
- 【IceFaces ice:tree相关知识】
- 简历(应聘软件开发)(江苏,上海)
- 设计模式读书笔记(五)——工厂方法模式
- 今天开始学习DELPHI 2006 ECO
- linux初始
- XmlHttp实现无刷新三联动下拉框
- 如何对自己进行一分钟称赞
- RIP协议概述
- VI - 从入门到精通之一
- MSSQL2005错误处理模版
- vi用法