行为型
模式
模板方法模式、解释器模式是类型为模式,
模板方法
模式
模板方法(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