设计模式、系统设计 record part05

行为型模式

在这里插入图片描述
在这里插入图片描述
模板方法模式、解释器模式是类型为模式,


模板方法模式

在这里插入图片描述
在这里插入图片描述
模板方法(Template Method)
抽象类(Abstract Class)
抽象方法(Abstract Method)
具体方法(Concrete Method)
钩子方法(Hook Method)
具体子类(Concrete Class)
在这里插入图片描述

//抽象类,定义模板方法、基本方法
public abstract class AbstractClass{
	//模板方法
	public final void cookProcess(){
	   pourOil() //倒油
	   heatOil() // 加热油
	   pourVegetable() // 倒入蔬菜
	   pourSauce() // 倒入酱料
	   fry() // 炸
	}
	//1.倒入食用油
	public void pourOil(){
		System.out.println('倒油')
	}
	 //2. 热油的方法
	public void heatOil() {
  		System.out.println("热油");
	}
	// 3.导入蔬菜,由于导入的蔬菜不同,咱们使用抽象方法声明
	public abstract void pourVegetable();
	// 4. 导入的调味品也不同
	public abstract void pourSauce();
	// 5. 翻炒过程都一样,声明普通方法
	public void fry(){
   		System.out.println("炒菜炒到熟...");
	}

上面的代码就是 模板方法模式中抽象类(Abstract Class) AbstractClass,里面的 模板方法(Template Method)cookProcess() 谁要炒菜都可以调用,
具体实现类,一个子类 包菜,如下:
在这里插入图片描述
另一个子类 菜心,如下:
在这里插入图片描述
一个测试类 Client,如下:
在这里插入图片描述
炒包菜,
1.new ConcreteClass_BaoCai()
2.使用父类的方法 cookProcess()
在父类的 cookProcess() 方法中,除了子类改写的pourVegetable()、pourSauce() (这2个方法是父类中的抽象方法(Abstract Method)被子类改写,所以用子类自己的)用子类自己的,其他几个(其他几个都是父类的具体方法(Concrete Method),子类没有重写,所以直接用父类的)都用父类的。
运行结果,如下:
在这里插入图片描述
在这里插入图片描述


策略模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
抽象策略(Strategy)
具体策略(ConcreteStrategy)
环境(Context)
在这里插入图片描述
抽象策略(Strategy)Strategy 接口,如下:
在这里插入图片描述
具体策略 1(ConcreteStrategy)StrategyA 实现 Strategy 接口,如下:
在这里插入图片描述
具体策略 2(ConcreteStrategy)StrategyB 实现 Strategy 接口,如下:
在这里插入图片描述
具体策略 3(ConcreteStrategy)StrategyC 实现 Strategy 接口,如下:
在这里插入图片描述
环境(Context)SaleMan ,它持有Strategy 接口的对象作为自己的属性,如下:
在这里插入图片描述
一个测试类 Client,如下:
在这里插入图片描述
测试结果如下:
在这里插入图片描述
在这里插入图片描述


命令模式

在这里插入图片描述
在这里插入图片描述
抽象命令类(Command)
具体命令类(Concrete Command)
实现者、接收者(Receiver)
调用者、祈祷者(Invoker)
October2024the09thWednesday(MTWTFSS)
在这里插入图片描述
1.调用者、祈祷者(Invoker)服务员 waiter 持有 抽象命令类(Command),发起命令,
2.实现者、接收者(Receiver)厨师 seniorChef 真正干活的人 做饭,被 具体命令类(Concrete Command)持有和调用,
3.(Invoker)通过 (Command)调用(Receiver)干活
实验包含类和接口如下:
在这里插入图片描述
抽象命令类(Command)Commnad接口,代码如下:
在这里插入图片描述
具体命令类(Concrete Command)OrderCommand 实现接口Commnad,代码如下
在这里插入图片描述
在这里插入图片描述
}
订单类,Order 暂时没有角色,只是辅助本示例的实验,如下:
在这里插入图片描述
}
实现者、接收者(Receiver)SeniorChef 真正干活的人制作顾客点的菜品,如下:
在这里插入图片描述
调用者、祈祷者(Invoker)Waitor,持有Commnad接口,如下:
在这里插入图片描述
测试类 Client ,代码如下:
在这里插入图片描述
在这里插入图片描述
就是说,所有的类都提前做好了准备,然后由调用者、祈祷者(Invoker)Waitor 来发出命令,其他类各司其职,最后再由实现者、接收者(Receiver)SeniorChef 来接收命令并完成做饭任务。
执行结果,如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


责任链模式

在这里插入图片描述
在这里插入图片描述
抽象处理者(Handler)
具体处理者(Concrete Handler)
客户类(Client)
在这里插入图片描述
实验包含的类,如下:
在这里插入图片描述
请假条 LeaveRquest ,没有角色,代码如下:
在这里插入图片描述
抽象处理者(Handler)父类 Handler,代码如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
}
}
具体处理者1(Concrete Handler)GroupLeader 子类,代码如下:
在这里插入图片描述
具体处理者3(Concrete Handler)GeneralManager 子类,代码如下:
在这里插入图片描述
具体处理者2(Concrete Handler)Manager 子类,代码如下:
在这里插入图片描述
测试类 Client,代码如下
在这里插入图片描述
测试结果,如下:
在这里插入图片描述
如果请假条改成3天,如下:
在这里插入图片描述
结果如下:
在这里插入图片描述
若再改请假条到7天,如下:
在这里插入图片描述
结果如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
October2024the10thThursday

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值