设计模式-工厂模式的应用
工厂模式的应用
有一个OEM制造商代理做HP笔记本电脑(Laptop),后来该制造商得到了更多的品牌笔记本电脑的订单Acer,Lenovo,Dell,该OEM商发现,如果一次同时做很多个牌子的本本,有些不利于管理。利用工厂模式改善设计,用JAVA语言实现该OEM制造商的工厂模式。绘制该模式的UML图。
【模式UML图】
【模式代码(JAVA语言实现)】
//Computer.java:
package sy_1.factory;
public interface Computer {
public void ComputerType();
}
package sy_1.factory;
public interface ComputerFactory {
public Computer getComputerType();
}
package sy_1.factory;
public class Dell implements Computer {
@Override
public void ComputerType() {
System.out.println("Dell");
}
}
package sy_1.factory;
public class Acer implements Computer {
@Override
public void ComputerType() {
System.out.println("Acer");
}
}
package sy_1.factory;
public class Lenovo implements Computer {
@Override
public void ComputerType() {
System.out.println("Lenovo");
}
}
package sy_1.factory;
public class DellFactory implements ComputerFactory {
@Override
public Computer getComputerType() {
return new Dell();
}
}
package sy_1.factory;
public class AcerFactory implements ComputerFactory {
@Override
public Computer getComputerType() {
return new Acer();
}
}
package sy_1.factory;
public class LenovoFactory implements ComputerFactory {
@Override
public Computer getComputerType() {
return new Lenovo();
}
}
//OEM_factoryMain .java:
package sy_1.factory;
public class OEM_factoryMain {
public static void main(String[] args) {
System.out.println("OEM生产电脑:");
Computer computer;
computer = new DellFactory().getComputerType();
computer.ComputerType();
computer = new AcerFactory().getComputerType();
computer.ComputerType();
computer = new LenovoFactory().getComputerType();
computer.ComputerType();
}
}
【运行截图】
工厂方法模式的适用性如下:
- 当一个类不知道它所需要的对象的类时,在工厂方法模式中,客户端不需要知道具体产品类的类名,只需要知道所对应的工厂即可;
- 当一个类希望通过其子类来指定创建对象时,在工厂方法模式中,对于抽象工厂类只需要提供一个创建产品的接口,而由其子类来确定具体要创建的对象,利用面向对象的多态性和里氏代换原则,在程序运行时,子类对象将覆盖父类对象,从而使得系统更容易扩展。
- 将创建对象的任务委托给多个工厂子类中的某一个,客户端在使用时可以无须关心是哪一个工厂子类创建产品子类,需要时再动态指定,可将具体工厂类的类名存储在配置文件或数据库中。