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