精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-02-07
最后修改:2010-02-22
上面处理的问题,每次使用都要new Factory,采用静态类实现一个具体的Factory获取
这种好处是,如果改变使用报表类型,只要修改一处就可以了。
小贴士:现在,使用哪个对象的问题早就由依赖注入解决了,但是这丝毫不影响abstractFatory 发挥他的作用,它的作用在与简化一系列对象的的创建,比如要创建三个对象,那就把他们作为一个对象组来创建,每次只要new 一个Factory 就可以了,可以转化为仅仅使用哪个factory的问题,而这个factory可以采用依赖注入的方式定义。抽象工厂用于创建一组对象,而工厂用于创建一个对象。
设计原则:对内部修改时开放的,对外部引用确定的,若非万不得已,不要修改已经提供的接口,这里所说的接口包含给别人用的任何类,而不仅仅限于系统间的接口,尽管系统间的接口更要考虑这个问题。
考虑业务变更,增加了一个需要创建别的对象的报表组件。 Adapter模式
Adapter Extends CrystalReportFactory implements IreportFactoryExtension
这样,原来的 IreportFactory factory = new CrystalReportFactoryAdapter (); 这个仍然成立 对外仍然是不变的。 唯一的缺点是需要强制类型转换才能使用
引申:考虑使用抽象还是使用接口,如何避免强制转化 使用模板模式+抽象工厂模式,共同的东西作为抽象工厂抽象方法,只有一个子类需要的作为实际的方法,需要的子类则覆盖这个方法,这样就避免了显式的转化。 小贴士: 什么时候用抽象类,什么时候用接口。 ①子类中有共同的实现逻辑,选择抽象类。 ②存在明显的多重继承的可能 ③其它情况优先选择抽象类。
2. 应用场景:工厂设备 由Machine ,Port等组成。Port有入口类型input,和出口类型output有的设备是一个Machine 带有输入输出口,有的是一个设备是一个Machine带有输入输出口。 希望扩展:满足以后一个机器多个输入输出接口等的定义。 分析:设备类有设备名称等。Machine 类有名称等,Port类有输入输出口等。
糟糕的设计—调用时进行对象的组合,创建了Machine和N多port等对象,通过set方法组合起来。
使用builder模式
进阶,如何组装执行这些对象,需要一个导演类,这个导演类由Factory来承担(应用模式自如的时候自然会想到需要怎样的模式来组织过程,对于创建对象的一搬就是Factory模式了)
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 2082 次