常用设计模式介绍
设计模式的分类
创建型模式(Creational):关注对象的实例化过程,包括了如何实例化对象、隐藏对象的创建细节等。常见的创建型模式有单例模式、工厂模式、抽象工厂模式等。
结构型模式(Structural):关注对象之间的组合方式,以达到构建更大结构的目标。这些模式帮助你定义对象之间的关系,从而实现更大的结构。常见的结构型模式有适配器模式、装饰器模式、代理模式等。
行为型模式(Behavioral):关注对象之间的通信方式,以及如何合作共同完成任务。这些模式涉及到对象之间的交互、责任分配等。常见的行为型模式有观察者模式、策略模式、命令模式等。
工厂模式
工厂模式
1.场景介绍
设计一个运算方法,可以运算两个数的加减乘除等运算
思维:页面与业务分离开,加减乘除独立,方便后续有其他算法加入时不受影响
案例代码
1.运算类
package org.example.model.factory;
public class Compute {
private int numA;
private int numB;
public int getNumA() {
return numA;
}
public void setNumA(int numA) {
this.numA = numA;
}
public int getNumB() {
return numB;
}
public void setNumB(int numB) {
this.numB = numB;
}
public int getResult(int numA,int numB){
return 0;
}
}
2.加法类
package org.example.model.factory;
public class OperaAdd extends Compute{
@Override
public int getResult(int numA,int numB) {
return numA + numB;
}
}
3.减法类
package org.example.model.factory;
public class OperaReduce extends Compute{
@Override
public int getResult(int numA,int numB) {
return numA - numB;
}
}
4.乘法类
package org.example.model.factory;
public class OperaMul extends Compute{
@Override
public int getResult(int numA,int numB) {
return numA * numB;
}
}
5.除法类
package org.example.model.factory;
public class OperaDiv extends Compute{
@Override
public int getResult(int numA,int numB) {
if (numB != 0){
return numA / numB;
}else {
throw new RuntimeException("除数不能为0");
}
}
}
6.工厂类
package org.example.model.factory;
public class OperaFactory {
public static Compute createCompute(String opera){
Compute c = null;
switch (opera){
case "+":
c = new OperaAdd();
break;
case "-":
c = new OperaReduce();
break;
case "*":
c = new OperaMul();
break;
case "/":
c = new OperaDiv();
break;
}
return c;
}
}
7.测试
package org.example.model.factory;
public class TestDemo {
public static void main(String[] args) {
Compute c = OperaFactory.createCompute("+");
int result = c.getResult(3,8);
System.out.println(result);
}
}
8.输出结果
参考链接
参考书籍:《大话设计模式》
参考博客:
Java开发者必备:23种设计模式全面解析
23种设计模式(Java版,超详细!)