为什么要用设计模式
使用设计模式的好处:使得程序能够增强了极大的* 维护性,复用性,扩展性和灵活性*
设计模式一:简单工厂模式
举例子引出设计模式:
用面向对象的方式实现一个计算器,输入两个数和运算符号,得到结果
不用设计模式的情况实现:
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());
}
引出简单工厂模式的概念,为什么要用这种设计模式
因为在这里,在创建了多个不同运算类型之后,到底要实例化谁,将来会不会增加实例化的对象,比如我们可能又会加入一个新的运算也尤未可知,这就是很容易变化的地方,因此应该考虑用一个单独的类来做这个创造实例的过程,这个类就是工厂类,这种设计方法就是设计模式