您的位置:首页 > 其它

设计模式----Factory Method --创建型

2007-08-08 00:43 337 查看
从耦合关系谈起
– 模块与模块之间的紧耦合使
得软件面对变化时,相关的
模块都要随之更改
– 模块与模块之间的松耦合使
得软件面对变化时,一些模
块更容易被替换或者更改,
但其他模块保持不变
耦合关系直接决定着软件面对变化时的行为

动机(Motivation)

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

意图(Intent)

定义一个用于创建对象的接口,让子类决定实例化
哪一个类。Factory Method使得一个类的实例化延迟
到子类。
——《设计模式》GoF

结构(Structure)



写一个测试汽车系统


class Car




...{


public void Startup()




...{}


public void Run()




...{}


public void Turn(Direction direction)




...{}


public void stop()




...{


}




}




class CarTestFramework




...{


public void BuildTestContext()




...{ Car car=new Car();


//....


}




public void DoTest()




...{


Car car=new Car();


}


public TestData GetTestData()




...{ }




}






/**///////////////////这样的写的问题 car是变化的//////////


//////////下面就是可以


abstract class AbstractCar




...{


public abstract void Startup();




public abstract void Run();




public abstract void Turn(Direction direction);




public abstract void stop();






}


class HongqiCar :AbstractCar




...{


Enginee enginee1;


Enginee enginee2;


Enginee enginee3;


Enginee enginee4;


public void Startup()




...{


//.......


}




public void Run()




...{}






public void Turn(Direction direction)...{}




public void stop()




...{}




}












class CarTestFramework




...{


public void BuildTestContext(AbstractCar car)//




...{ car.run();


//....


}




public void DoTest(AbstractCar car)




...{


car.run();


}


public TestData GetTestData()




...{ }




}






Abstract class AbstractCarFactory...{


public void AbstractCar Create()




}










class HongqiCarFactory:AbstractCartFactory...{


public static override AbstractCar Create()




...{


new HongqiCar();




}


}




class App




...{


public static void Main()




...{


TestCarFramework tf=new TestCarFramework();


tf.BuildTestContext(HongqiCarFactory.Create());//这个也可以不要改 这个在程序上用配置文件


}






}





主逻辑不要更改--接口 ,更改就是实现;



Factory Method模式的几个要点
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐