Pattern question
cantabile
cantabile.03 at wanadoo.fr
Fri Jul 8 05:53:56 EDT 2005
bruno modulix a écrit :
> You may want to have a look at the Factory pattern...
>
> # outrageously oversimplified dummy exemple
> class Gui(object):
> def __init__(self, installer):
> self.installer = installer
>
> class PosixGui(Gui):
> pass
>
> class Win32Gui(Gui):
> pass
>
> class GuiFactory(object):
> def getGui(self, installer):
> if os.name == 'posix':
> return PosixGui(installer)
> elif os.name == 'win32':
> return Win32Gui(installer)
> else:
> raise "os %s not supported" % os.name
>
> class Installer(object):
> def __init__(self, guiFactory):
> self.gui = guiFactory.getGui(self)
>
> def main():
> inst = Installer(GuiFactory())
> return inst.gui.main()
>
> NB 1:
> You may want to hide away the gui stuff:
>
> class Installer(object):
> def __init__(self):
> self.gui = GuiFactory().getGui(self)
>
> def main(self):
> return self.gui.main()
>
> def main():
> return Installer().main()
>
Thanks for this, Bruno. It is much more elegant and adaptable than my
first attempt.
>
> NB 2 :
> if it has to run in text mode, you should consider renaming "gui" to
> "ui", since a CLI is not really a 'graphical' ui !-)
You're right :))
> NB 3 :
> I made the GuiFactory a class, but it could also be a simple function.
> NB 4 :
> there are of course other solutions to the problem, which may or not be
> more appropriate...
>
Thanks a lot for these detailed explanations.
More information about the Python-list
mailing list