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

工厂模式的应用

有一个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:

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();
	}

}

【运行截图】

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

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

相关推荐

贺兰星辰:不要漏个人信息,除了简历模板不太好以外你这个个人简介是不是太夸大了...
点赞 评论 收藏
分享
我已成为0offer的糕手:别惯着,胆子都是练出来的,这里认怂了,那以后被裁应届被拖工资还敢抗争?
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务