设计模式-工厂模式的应用

工厂模式的应用

有一个OEM制造商代理做HP笔记本电脑(Laptop),后来该制造商得到了更多的品牌笔记本电脑的订单Acer,Lenovo,Dell,该OEM商发现,如果一次同时做很多个牌子的本本,有些不利于管理。利用工厂模式改善设计,用JAVA语言实现该OEM制造商的工厂模式。绘制该模式的UML图。

【模式UML图】

工厂模式
【模式代码(JAVA语言实现)】
//Computer.java:

package sy_1.factory;

public interface Computer {
	public void ComputerType();
}

//ComputerFactory.java:

package sy_1.factory;

public interface ComputerFactory {
	public Computer getComputerType();
}

//Dell.java:

package sy_1.factory;

public class Dell implements Computer {

	@Override
	public void ComputerType() {
		System.out.println("Dell");
	}

}

//Acer.java:

package sy_1.factory;

public class Acer implements Computer {

	@Override
	public void ComputerType() {
		System.out.println("Acer");
	}

}

//Lenovo.java:

package sy_1.factory;

public class Lenovo implements Computer {

	@Override
	public void ComputerType() {
		System.out.println("Lenovo");
	}

}

//DellFactory.java:

package sy_1.factory;

public class DellFactory implements ComputerFactory {

	@Override
	public Computer getComputerType() {
		return new Dell();
	}

}

//AcerFactory.java:

package sy_1.factory;

public class AcerFactory implements ComputerFactory {

	@Override
	public Computer getComputerType() {
		return new Acer();
	}

}

//LenovoFactory.java:

package sy_1.factory;

public class LenovoFactory implements ComputerFactory {

	@Override
	public Computer getComputerType() {
		return new Lenovo();
	}

}

//OEM_factoryMain .java:

扫描二维码关注公众号,回复: 5804090 查看本文章
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();
	}

}

【运行截图】
运行结果

工厂方法模式的适用性如下:

  • 当一个类不知道它所需要的对象的类时,在工厂方法模式中,客户端不需要知道具体产品类的类名,只需要知道所对应的工厂即可;
  • 当一个类希望通过其子类来指定创建对象时,在工厂方法模式中,对于抽象工厂类只需要提供一个创建产品的接口,而由其子类来确定具体要创建的对象,利用面向对象的多态性和里氏代换原则,在程序运行时,子类对象将覆盖父类对象,从而使得系统更容易扩展。
  • 将创建对象的任务委托给多个工厂子类中的某一个,客户端在使用时可以无须关心是哪一个工厂子类创建产品子类,需要时再动态指定,可将具体工厂类的类名存储在配置文件或数据库中。

猜你喜欢

转载自blog.csdn.net/xu_benjamin/article/details/89073775