考虑一个问题。我们现在需要一个类的实例来协助我们完成某项功能。这在面向对象的开发过程中是常见的。在使用这个类的实例的时候,我们还需要对他进行一些初始化的工作。另外,为了保证我们的代码具有一定的扩展性,我们不想关心这个类的具体细节,并且希望在将来问题发生变化的时候,我们可以不改变我们的代码就可以改变这个类的行为。
现在问题在于,初始化工作同这个类的具体细节密切相关。类的行为不同,初始化的工作也不同。但是这个类本身只是提供一些辅助性的工作,在它的内部,也同样不关心外部调用环境,也就是我们的代码中的细节。这样就产生了矛盾:不知道这个类的细节,我们不能做初始化工作,这个类本身不能做初始化工作。我们为了扩展性不想知道类的细节。
为了解决这个矛盾,就可以使用设计模式中的工厂方法。
这个方法在设计模式这本书中是这样定义的:定义一个用于创建对象的接口,让子类决定将那个类实例化。
这样,对于上述矛盾,我们可以做这样的设计:
我们需要的协助类叫做product
定义一个类factory。他有一个方法叫做createproduct(),这个方法返回一个product类的实例。这个方法是overridable 的,以便子类覆盖。
假设我们的客户端代码是clientfun()方法,他有一个参数,类型为factory:clientfun(f as factory)
我们可以把初始化工作放在createproduct方法中。
clientfun()代码中,在需要product类实例的时候,调用f.createproduct()方法,获得product类的实例。
在需要新的pruduct实例的时候,我们可以创建一个factory的子类,在这个子类中覆盖createproduct方法,返回一个新的product实例,并进行新的初始化工作。
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 »
相关推荐
- 暂无文章
