1.什么是设计模式
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。
2.设计模式的作用
脉络,如同大厦的结构一样。
那么如何实习那代码的可重用行呢?这个就涉及到面向对象的几个原则:
1.单一职责原则,就是一个类只负责一件事情。
2.开放-封闭原则。对扩展开放,对修改关闭。坚持这个原则就必须尽量考虑接口封装,抽象机制和多态技术。
5.接口隔离原则(Interface Segregation Principle,
ISP),使用多个专门的接口比使用单个接口要好的多。
3.简单工厂设计模式
简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式。简单工厂模式是由一个工厂对象决创建出哪一种产品类的实例。
使用情景:
再不确定会有多少个处理操作时应该考虑使用简单工厂模式,如针对同样的接收到的数据,处理的逻辑可能会不同,可能以后还会增加新的操 作。
简单实现:
1.父类
public interface Operator {
Object operator(Object... objs);
}
Object operator(Object... objs);
}
2.子类
//加法
public class OperatorAdd implements Operator {
@Override
public Object operator(Object... objs) {
if(objs!=null && objs.length==2){
return Double.parseDouble(objs[0].toString())+Double.parseDouble(objs[1].toString());
}
return null;
}
}
@Override
public Object operator(Object... objs) {
if(objs!=null && objs.length==2){
return Double.parseDouble(objs[0].toString())+Double.parseDouble(objs[1].toString());
}
return null;
}
}
//减法
public class OperatorSub implements Operator {
@Override
public Object operator(Object... objs) {
if(objs!=null && objs.length==2){
return Double.parseDouble(objs[0].toString())-Double.parseDouble(objs[1].toString());
}
return null;
}
}
@Override
public Object operator(Object... objs) {
if(objs!=null && objs.length==2){
return Double.parseDouble(objs[0].toString())-Double.parseDouble(objs[1].toString());
}
return null;
}
}
3.工厂类
public class Factory {
public static Operator getOperatorInstance(String opt,Object... objs){
switch(opt){
case "+":
return new OperatorAdd();
case "-":
return new OperatorSub();
default:
break;
}
return null;
}
}
public static Operator getOperatorInstance(String opt,Object... objs){
switch(opt){
case "+":
return new OperatorAdd();
case "-":
return new OperatorSub();
default:
break;
}
return null;
}
}
4.测试类
public class Test {
public static void main(String[] args) {
String _strnum1;
String _strnum2;
String operator;
Scanner scan=new Scanner(System.in);
System.out.println("请输入参数");
_strnum1=scan.nextLine();
_strnum2=scan.nextLine();
System.out.println("请输入操作:");
operator=scan.nextLine();
System.out.println("计算结果为:"+Factory.getOperatorInstance(operator).operator(_strnum1,_strnum2));
}
}
public static void main(String[] args) {
String _strnum1;
String _strnum2;
String operator;
Scanner scan=new Scanner(System.in);
System.out.println("请输入参数");
_strnum1=scan.nextLine();
_strnum2=scan.nextLine();
System.out.println("请输入操作:");
operator=scan.nextLine();
System.out.println("计算结果为:"+Factory.getOperatorInstance(operator).operator(_strnum1,_strnum2));
}
}
//补充知识点:
Object operator(Object... objs); 的参数为可变参数,可以有也可以没有