简单工厂 计算加减计算器 //操作符 public abstract class Operate { private double num1; private double num2; public abstract double getResult(); public double getNum1() { return num1; } public void setNum1(double num1) { this.num1 = num1; } public double getNum2() { return num2; } public void setNum2(double num2) { this.num2 = num2; } } //加法继承 public class Plus extends Operate { @Override public double getResult() { return (this.getNum1()+this.getNum2()); } } //减法继承 public class Sub extends Operate { @Override public double getResult() { // TODO Auto-generated method stub return (this.getNum1()-this.getNum2()); } } //工厂类返回一个操作实例 public class OperateFactory { // public static Operate getOperate(String oper){ // if("+".equals(oper)){ // return new Plus(); // }else if("-".equals(oper)){ // return new Sub(); // } // return null; // } //利用反射解决封闭 public static Operate getOperate(String oper){ Operate o=null; try { o = (Operate)Class.forName("com.nbchina.design.pattern.factory1."+oper).newInstance(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return o; } } 客户端测试类 public class Test { public static void main(String[] args) { System.out.println("请输入第一个操作数"); Scanner scanner = new Scanner(System.in); String number1=scanner.next(); System.out.println("请输入操作符"); String operate = scanner.next(); System.out.println("请输入第二个操作数"); String number2=scanner.next(); double num1 = Double.parseDouble(number1); double num2 = Double.parseDouble(number2); Operate o = null; try { o = OperateFactory.getOperate("Sub"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } o.setNum1(num1); o.setNum2(num2); System.out.println(o.getResult()); } } 抽象工厂 public abstract class Car { abstract void run(); abstract void stop(); } public class Ford extends Car { @Override void run() { System.out.println("福特车启动"); } @Override void stop() { System.out.println("福特车停止"); } } public class Benz extends Car { @Override void run() { System.out.println("奔驰车启动"); } @Override void stop() { System.out.println("奔驰车停止"); } } public abstract class Bus { abstract void run(); abstract void stop(); } public class MinBus extends Bus { @Override void run() { System.out.println("小巴启动"); } @Override void stop() { System.out.println("小巴停止"); } } public class BigBus extends Bus { @Override void run() { System.out.println("大巴启动"); } @Override void stop() { System.out.println("大巴停止"); } } public class CarFactory { public static Car getCar(String type){ Car c=null; try { c=(Car) Class.forName("com.nbchina.design.pattern.factory2."+type).newInstance(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return c; } } public class BusFactory { public static Bus getBus(String type){ Bus b=null; try { b=(Bus) Class.forName("com.nbchina.design.pattern.factory2."+type).newInstance(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return b; } } 客户端测试类 public class Test { public static void main(String[] args) { Bus b = null; BusFactory bf = new BusFactory(); b=bf.getBus("MinBus"); b.run(); b.stop(); Car c = null; CarFactory cf = new CarFactory(); c = cf.getCar("Ford"); c.run(); c.stop(); } }