您的位置:首页 > 编程语言 > C#

23种设计模式-FactoryMethod(工厂方法)设计模式

2017-03-25 23:10 811 查看
解决"单个对象"的需求变化,
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FactoryMethod工厂方法模式_创建型模式_
{
//一个设计成功的工程,当需求改变时,主逻辑和接口都不需要改
//只需要扩展你的具体实现.

/*
*1.Factory Method模式主要用于隔离类对象使用者和具体类型之间的耦合关系.面对一个经常变换的具体类型,紧耦合关系会导致软件的脆弱.
*2.Factory Method模式通过面向对象手法,将所要创建的具体对象工作延迟到子类,从而实现一种扩展(而非更改)的策略,较好的解决了这种紧耦合关系.
*3.Factory Method模式解决"单个对象"的需求变化,Abstract Factory模式解决"系列对象"的需求变化,Builder模式解决"对象部分"的希求变化.
*/

//====================AbstractCar抽象文件===============
public abstract class AbstractCar
{
public abstract void SatrtUp() { }
public abstract void Run() { }
public abstract void Turn() { }
public abstract void Stop() { }
}
//======================================================

//=====================HongQiCar实例文件================
public class HongQiCar:AbstractCar{
public override void SatrtUp() {
Console.WriteLine("红旗UP");
}

public override void Run() {
Console.WriteLine("红旗Run");
}

public override void Turn() {
Console.WriteLine("红旗Turn");
}

public override void Stop() {
Console.WriteLine("红旗Stop");
}

}
//======================================================

//添加CarFactory抽象类这样就实现了对扩展开放对,修改关闭的原则
//===============CarFactory(汽车工厂抽象方法)抽象文件===
public abstract class CarFactory {
public abstract AbstractCar CreateCar();
}
//========================================================

//=======HongQiCarFactory(红旗汽车工厂实例方法)文件=======
public class HongQiCarFactory:CarFactory{
public override AbstractCar CreateCar(){
return new HongQiCar();
}
}
//========================================================

//=============CarTestFramework文件=======================
//汽车测试框架
class CarTestFramework
{
//构建测试环境 假设测试环境不确定要几个car对象
//有了工厂方法就可以解决这个问题.,
public void BuildTestContext(CarFactory _carfactory)
{
AbstractCar c1 = _carfactory.CreateCar();
AbstractCar c2 = _carfactory.CreateCar();
AbstractCar c3 = _carfactory.CreateCar();
}
}
//========================================================

class Program
{
static void Main(string[] args)
{
CarTestFramework testFramework = new CarTestFramework();
//这个地方想要测试别的汽车的时候就不需要修改框架了,
//直接添加几个类,继承抽象类就可以了.
testFramework.BuildTestContext(new HongQiCarFactory());
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C#