简单工厂模式,又叫静态工厂模式,也就是把生产实例的动作交给工厂来完成,在使用类里没有生产实例的代码,加上反射的使用,极大的减少耦合,超级容易扩展。
package myDesignPattern01;
一个汽车抽象类:
public abstract class Car {
public abstract void printBrand();
}
三个品牌车:
宝马:
public class BMW extends Car {
@Override
public void printBrand() {
System.out.println("这是一辆宝马!");
}
}
尼桑:
public class Nissan extends Car{
@Override
public void printBrand() {
System.out.println("叫你爸爸给你买辆GTR");
}
}
奔驰:
public class Benz extends Car{
@Override
public void printBrand() {
System.out.println("奔驰奔驰奔驰");
}
}
一个工厂类:
public class CarFactory {
public static Car createCar(String carType) {
Car car = null;
/*switch (carType) {
case "BMW":
car = new BMW();
break;
case "Benz":
car = new Benz();
break;
case "Nissan":
car = new Nissan();
break;
}*/
try {
car=(Car) Class.forName("myDesignPattern01."+carType).newInstance();
} catch (Exception e) {
System.out.println("你要的车,么得了");
}
return car;
}
}
public class Client {
public static void main(String[] args) {
Car car = null;
String str = null;
Scanner sc = new Scanner(System.in);
System.out.println("想买啥车?");
while (sc.hasNext()) {
str = sc.nextLine();
try {
car = (Car) CarFactory.createCar(str);
car.printBrand();
} catch (Exception e) {
System.out.println("么得这车,你得是打错了");
}
}
}
}
一开始用的swich语句,后来想了想,如果要添加别的车型的话,还要改swich语句。
那么反射可以直接通过类名找到类,就用了反射。
不过缺点是这种写法类名要通过字符串得到就要加上包名,那么后面修改的话也是一个问题。
优点是只要是在myDesignPattern01这个包下添加车型,就可以直接添加,不用修改任何程序。
当然真正开发的时候应该不会采用这样的设计方法,这就是我自己写着摸索的2333333!