|
public class OperatingSystem {
IUnixFactory unixFactory;
public OperatingSystem(IUnixFactory unixFactory) {
this.unixFactory = unixFactory;
}
/**
* installerClient uses only the interfaces declared by AbstractFactory (IUnixFactory) and AbstractProduct
* (IBootLoader, IKernel, IShell, IDisplayManager, IWindowManager, IBaseApplications) classes.
*/
public void installerClient() {
IBootLoader bootLoader = unixFactory.installBootLoader();
IKernel kernel = unixFactory.installKernel();
IShell shell = unixFactory.installShell();
IDisplayManager displayManager = unixFactory.installDisplayManager();
IWindowManager windowManager = unixFactory.installWindowManager();
IBaseApplications applications = unixFactory.installApps();
bootLoader.bootUp();
kernel.loadKernel();
shell.loadShell();
displayManager.installDisplayManager();
windowManager.installWindowManager();
applications.installApplications();
}
/**
* client will not know the
* products the type of bootloader, kernel, shell, display, window manager or applications.
* That is encapsulated in factory used by the client.
*
*/
private static void factoryClient(IUnixFactory factory) {
OperatingSystem operatingSystem = new OperatingSystem(factory);
operatingSystem.installerClient();
}
public static void main(String[] args) {
IUnixFactory factory;
factory = new LinuxFactory();
factoryClient(factory);
factory = new BSDFactory();
factoryClient(factory);
factory = new UbuntuFactory();
factoryClient(factory);
}
}
|