public class DesignPattern { public static void main(String[] args) { //工厂设计模式便于用户使用,可以屏蔽底层实现细节,便于用于直接获得想要的东西,而且方便扩展 //无需修改工厂代码,就可以扩展想要得到的东西,使用场景如下: //1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等, //用户可以选择记录日志到什么地方。 //2、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。 //3、设计一个连接服务器的框架,需要三个协议,"POP3"、"IMAP"、"HTTP", //可以把这三个作为产品类,共同实现一个接口。 AnimalFactory factory = new AnimalFactory(); Animal dog = factory.getAnimal("Dog"); dog.eat(); Animal cat = factory.getAnimal("Cat"); cat.eat(); } } interface Animal{ //定义抽象方法,不同实例可以对其具有不同的实现 void eat(); } class Dog implements Animal{ @Override public void eat() { System.out.println("狗要吃东西"); } } class Cat implements Animal{ @Override public void eat() { System.out.println("猫要吃东西"); } } class AnimalFactory{ public Animal getAnimal(String str){ Animal animal = null; if(str == null){ System.out.println("传入参数有误"); return null; }else{ try { //使用反射,无需进行if else判断,缺点是需要将所有类放入同一个包,但可以进行优化 //即用户输入全类名 animal = (Animal) Class.forName("com.zhouge.design.test." + str).newInstance(); } catch (Exception e) { System.out.println("该动物不存在"); } } return animal; } }