大话设计模式之策略模式笔记
策略模式结构
classDiagram
class Context{
-Statage statage
+ContextIntegace(Statage statage)
}
class Stratage{
<<abstract>>
+ algorithmInterface()
}
class ConcreateStratage1{
}
class ConcreateStratage2{
}
Context o-- Stratage
ConcreateStratage1 --|>Stratage
ConcreateStratage2 --|>Stratage
以实现加、减、乘、除的计算器功能为例
分析:加、减、乘、除都是一种策略
classDiagram
class StratageContext{
-OperatrionStratage statage
+contextInteface(Statage statage)
}
class OperatrionStratage{
<<abstract>>
+ double contextInterface()
}
class ConcreateStratageAdd{
+ double contextInterface()
}
class ConcreateStratageSub{
+ double contextInterface()
}
class interactionView{
main(String[] args)
}
StratageContext o-- OperatrionStratage
ConcreateStratageAdd --|>OperatrionStratage
ConcreateStratageSub --|>OperatrionStratage
StratageContext o-- interactionView
Context 上下文
private OperationStratage stratage;
public double contextInterface(double numA, double numB) {
return stratage.algMethod(numA, numB);
}
public OperationStratage getStratage() {
return stratage;
}
public void setStratage(OperationStratage stratage) {
this.stratage = stratage;
}
public StratageContext() {
super();
}
public StratageContext(String type) {
switch (type) {
case "+":
this.stratage = new ConcreateStratageAdd();
break;
case "-":
this.stratage = new ConcreateStratageSub();
break;
}
}
public StratageContext(OperationStratage stratage) {
super();
this.stratage = stratage;
}
策略
public abstract class OperationStratage {
public abstract double algMethod(double numA, double numB);
}
加
public class ConcreateStratageAdd extends OperationStratage {
@Override
public double algMethod(double numA, double numB) {
return numA + numB;
}
}
减
public class ConcreateStratageSub extends OperationStratage {
@Override
public double algMethod(double numA, double numB) {
return numA - numB;
}
}
调用片段
public static void main(String[] args) {
System.out.println("**********************************************");
System.out.println("《大话设计模式》代码样例");
System.out.println();
try {
Scanner sc = new Scanner(System.in);
System.out.println("请输入数字A:");
double numberA = Double.parseDouble(sc.nextLine());
System.out.println("请选择运算符号(+、-、*、/):");
String strOperate = sc.nextLine();
System.out.println("请输入数字B:");
double numberB = Double.parseDouble(sc.nextLine());
StratageContext stratageContext = new StratageContext(strOperate);
System.out.println(stratageContext.contextInterface(numberA, numberB));
} catch (Exception e) {
System.out.println("您的输入有错:" + e.toString());
}
System.out.println();
System.out.println("**********************************************");
}
计算器工厂模式和策略模式两种方式的区别
- 工厂模式 在调用的时候需要涉及到两个类 一个是工厂类OperationFactory 还有一个就是那个抽象的Operation ,然后策略模式在调用的时候,之操作了一个类StratageContext;一定程度上实现了松耦合;
博客园地址:https://www.cnblogs.com/lixiuming521125/