为什么要用设计模式
使用设计模式的好处:使得程序能够增强了极大的* 维护性,复用性,扩展性和灵活性*
设计模式一:简单工厂模式
举例子引出设计模式:
用面向对象的方式实现一个计算器,输入两个数和运算符号,得到结果
不用设计模式的情况实现:
public class Calculator {
public double getResult (double number1,double number2,char operator){
switch (operator){
case '+' :return number1+number2;
case '-' :return number1-number2;
case '*' :return number1*number2;
case '/' :
if (number2==0 ){
throw new RuntimeException("除数不能为0" );
}
return number1/number2;
default :throw new RuntimeException("输入的操作符无效" );
}
}
public static void main (String[] args) {
Calculator cal=new Calculator();
System.out.println(cal.getResult(3 , 0 , '/' ));
}
}
使用设计模式改良之后
package 大话设计模式.简单工厂模式.模式修改1 ;
/**
* 定义接口Calculator,用于定义计算器的实现标准:两个数值和一个计算方法
* @author acer
*
*/
public abstract class Calculator {
private double number1;
private double number2;
public double getNumber1 () {
return number1;
}
public void setNumber1 (double number1) {
this .number1 = number1;
}
public double getNumber2 () {
return number2;
}
public void setNumber2 (double number2) {
this .number2 = number2;
}
public abstract double getResult ();
}
package 大话设计模式.简单工厂模式.模式修改1 ;
public class AddCal extends Calculator {
@Override
public double getResult () {
return this .getNumber1()+this .getNumber2();
}
}
package 大话设计模式.简单工厂模式.模式修改1 ;
public class JianCal extends Calculator {
@Override
public double getResult () {
return this .getNumber1()-this .getNumber2();
}
}
package 大话设计模式.简单工厂模式.模式修改1 ;
public class MulCal extends Calculator {
@Override
public double getResult () {
return this .getNumber1()*this .getNumber2();
}
}
package 大话设计模式.简单工厂模式.模式修改1 ;
public class DevCal extends Calculator {
@Override
public double getResult () {
if (this .getNumber2()==0 ){
throw new RuntimeException("除数不能为0" );
}
return this .getNumber1()/this .getNumber2();
}
}
package 大话设计模式.简单工厂模式.模式修改1 ;
public class YuCal extends Calculator {
@Override
public double getResult () {
if (this .getNumber2()==0 ){
throw new RuntimeException("除数不能为0" );
}
return this .getNumber1()%this .getNumber2();
}
}
public class Factory {
public Calculator getCal (char c){
switch (c){
case '+' :return new AddCal();
case '-' :return new JianCal();
case '*' :return new MulCal();
case '/' :return new DevCal();
case '%' :return new YuCal();
default :throw new RuntimeException("输入的操作符无效" );
}
}
}
public static void main (String[] args) {
Factory t=new Factory();
Calculator cal=t.getCal('/' );
cal.setNumber1(3 );
cal.setNumber2(0 );
System.out.println(cal.getResult());
}
引出简单工厂模式的概念,为什么要用这种设计模式
因为在这里,在创建了多个不同运算类型之后,到底要实例化谁,将来会不会增加实例化的对象,比如我们可能又会加入一个新的运算也尤未可知,这就是很容易变化的地方,因此应该考虑用一个单独的类来做这个创造实例的过程,这个类就是工厂类,这种设计方法就是设计模式