设计模式学习笔记五(Factory Method 工厂方法模式)

来源:互联网 发布:plc触摸屏编程 编辑:程序博客网 时间:2024/05/15 16:07

设计原则:松耦合,高内聚

动机:在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口。所有,我们需要提供一种“封装机制”来隔离出这个“易变对象”的变化,从而保持系统中“其它依赖该对象的对象”不随着需求的改变而改变

意图:定义一个对象的接口,让子类决定实例化那一个类。Factory Method使得一个类的实例化延迟到子类。

基本Code

public abstract class Car

{

     public abstract void Startup(); 

     public abstract void Run();

     public abstract void Turn(Direction direction);

     public abstract void Stop();    

}

 

public abstract class CarFactory

{

     public abstract Car CreateCar();

}

 

public class HongqiCar: Car

{

     public override void Startup()

     {

     }

     public override void Run()

     {

     }   

     public override void Turn(Direction direction)

     {

     }   

     public override void Stop()

     {

     }   

}

 

public class HongqiCarFactory:CarFactory

{

     public override Car CreateCar()

     {

         return new HongqiCar();

     }

}

 

public class CarTestFramework

{

     public void BuildTestContext(CarFactory carFactory)

     {

         Car c1=carFactory.CreateCar();

         Car c2=carFactory.CreateCar();

         Car c3=carFactory.CreateCar();

         Car c4=carFactory.CreateCar();

}

}

 

class App

{

     static void Main()

     {

         CarTestFramework carTestFramework=new CarTestFramework();

         //carTestFramework.BuildTestContext(new HongqiCarFactory());

         carTestFramework.BuildTestContext(new DongfengFactory());

     }

}

在此Code中,要添加新的车型,只需要新增DongfengCarDongfengCarFactory就可以了。如下所示:

public class DongfengCar : Car

{

    public override void Startup()

    {

    }

    public override void Run()

    {

    }

    public override void Turn(Direction direction)

    {

    }

    public override void Stop()

    {

    }

}

 

public class DongfengFactory : CarFactory

{

    public override Car CreateCar()

    {

        return new DongfengCar();

    }

}

 

模式要点

1、  Factory Method主要用于隔离类对象的使用者和具体类型之间的耦合关系,面对一个经常变化的具体类型,紧耦合关系会导致软件的脆弱。

2、  Factory Method模式通过面向对象的手法,将所要创建对象的具体工作延迟到子类,从而一种扩展(而非更改)的策略,较好地解决了这种紧耦合关系。

3、  Factory Method模式解决了“单个对象”的需求变化,Abstract Method模式解决了“系列对象”的需求变化,Builder模式解决“对象部分”的需求变化。