大话设计模式之策略模式笔记

策略模式结构

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("**********************************************");

	}

计算器工厂模式和策略模式两种方式的区别

  1. 工厂模式 在调用的时候需要涉及到两个类 一个是工厂类OperationFactory 还有一个就是那个抽象的Operation ,然后策略模式在调用的时候,之操作了一个类StratageContext;一定程度上实现了松耦合;
posted @ 2023-10-28 11:40  啄木鸟伍迪  阅读(23)  评论(0)    收藏  举报
//火箭 GenerateContentList();