从耦合关系谈起
– 模块与模块之间的紧耦合使
得软件面对变化时,相关的
模块都要随之更改
– 模块与模块之间的松耦合使
得软件面对变化时,一些模
块更容易被替换或者更改,
但其他模块保持不变
耦合关系直接决定着软件面对变化时的行为
动机(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模式的几个要点
本文探讨了软件设计中的工厂方法模式,旨在通过抽象化对象创建过程,实现更好的模块间解耦。文章介绍了该模式的动机、意图及结构,并通过具体示例展示了如何应用此模式来提高系统的灵活性。

被折叠的 条评论
为什么被折叠?



