策略模式(Strategy)

策略模式用来分离算法的实现,类比与if-else;通过上下文对实现进行管理。
约束接口:

public interface IPay {void pay(Context ctx);
}

上下文:

public class Context implements IPay {private IPay pay;protected String name;protected int price;public Context(IPay pay, String name, int price) {this.pay = pay;this.name = name;this.price = price;}public void pay() {pay(this);}@Overridepublic void pay(Context ctx) {pay.pay(ctx);}
}

实现

public class RMBPay implements IPay {@Overridepublic void pay(Context ctx) {System.out.println(ctx.name+"人民币");}
}

使用:

public class MyClass {public static void main(String[] args){IPay rmbPay=new RMBPay();Context context=new Context(rmbPay,"ss",22);context.pay();}
}

命令模式(Command)

通过将行为封装达到解耦的目的

public interface Command {void execute();
}

码农:

public class Work implements Command {@Overridepublic void execute() {System.out.println("努力工作");}
}

加班

public class Work996 implements Command {@Overridepublic void execute() {System.out.println("996工作..");}
}

主管:

public class Manage implements Command {private Command command;public Manage(Command command) {this.command = command;}@Overridepublic void execute() {command.execute();}
}

人事


public class HR implements Command{private Command command;public HR(Command command) {this.command = command;}@Overridepublic void execute() {command.execute();}
}

人事干活:

public class Retire implements Command {private Command command;@Overridepublic void execute() {System.out.println("辞退天天摸鱼的...");}
}

老板:

public class Boos {private Command command;public void setCommand(Command command) {this.command = command;}public void talk() {command.execute();}
}

老板发布命令:

public class MyClass {public static void main(String[] args) {//码农Command work = new Work();//主管Manage manage = new Manage(work);//老板Boos boos = new Boos();//老板找主管boos.setCommand(manage);//老板让干活boos.talk();//人事HR hr=new HR(new Work996());//老板找人事1boos.setCommand(new HR(new Retire()));//员工上班摸鱼boos.talk();//老板找人事2boos.setCommand(hr);//员工最近没有奋斗精神boos.talk();}}

Java设计模式,行为型(一)(策略模式,命令模式)相关推荐

  1. 【每天一个java设计模式(十五)】 - 命令模式

    命令模式是一种数据驱动的设计模式,它属于行为型模式.请求以命令的形式包裹在对象中,并传给调用对象.调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令. 命令模式也就是一个 ...

  2. Java设计模式及应用场景之《命令模式》

    文章目录 一.命令模式定义 二.命令模式的结构和说明 三.命令模式示例 四.命令模式扩展 -- 宏命令示例 五.命令模式扩展 -- 可撤销和恢复操作示例 1.反操作式(补偿式) 2.存储恢复式 六.命 ...

  3. 【每天一个java设计模式(二十三)】 - 访问者模式

    在访问者模式中,我们使用了一个访问者类,它改变了元素类的执行算法.通过这种方式,元素的执行算法可以随着访问者改变而改变.这种类型的设计模式属于行为型模式.根据模式,元素对象已接受访问者对象,这样访问者 ...

  4. 【每天一个java设计模式(十四)】 - 解释器模式

    解释器模式提供了评估语言的语法或表达式的方式,它属于行为型模式.这种模式实现了一个表达式接口,该接口解释一个特定的上下文. 解释器模式主要包括以下几个部分: 抽象表达式角色:定义解释器的接口,约定解释 ...

  5. 《设计模式详解》行为型模式 - 命令模式

    命令模式 6.3 命令模式 6.3.1 概述 6.3.2 结构 6.3.3 案例实现 6.3.4 优缺点 6.3.5 使用场景 6.3.6 JDK 源码 - Runnable 完整的笔记目录:< ...

  6. 设计模式-行为型模式-命令模式

    设计模式-行为型模式-命令模式 基础 以一个MIS系统为栗子 MIS 管理信息系统(Management Information System,MIS)是一个以人为主导的,利用计算机硬件.软件和网络设 ...

  7. 设计模式 — 行为型模式 — 命令模式

    目录 文章目录 目录 命令模式 应用场景 代码示例 命令模式 命令模式的目的是解耦调用操作的对象(调用者)和提供实现的对象(接收者). 命令模式的思路是在调用者和接收者之间插入一个命令类(Comman ...

  8. Java设计模式之结构型:享元模式

    一.什么是享元模式: 享元模式通过共享技术有效地支持细粒度.状态变化小的对象复用,当系统中存在有多个相同的对象,那么只共享一份,不必每个都去实例化一个对象,极大地减少系统中对象的数量.比如说一个文本系 ...

  9. Java设计模式之结构型:装饰器模式

    一.什么是装饰器模式: 当需要对类的功能进行拓展时,一般可以使用继承,但如果需要拓展的功能种类很繁多,那势必会生成很多子类,增加系统的复杂性,并且使用继承实现功能拓展时,我们必须能够预见这些拓展功能, ...

  10. Java设计模式(7)装饰模式(Decorator模式)

    Decorator常被翻译成"装饰",我觉得翻译成"油漆工"更形象点,油漆工(decorator)是用来刷油漆的,那么被刷油漆的对象我们称decoratee.这 ...

最新文章

  1. 那些年,我们见过的 Java 服务端乱象
  2. 工行服务器维护时间,工行服务器安全链接
  3. liferay requestrequest和actionRequest用法
  4. 一张图看程序媛阿源的2021个人年度流水账
  5. go实现本地文件搜索引擎
  6. 分布式链路追踪(Sleuth、Zipkin)
  7. 按键精灵定位坐标循环_[按键精灵手机版教程]DNF遍历背包卖物
  8. SciPy 安装不上?
  9. make 及 make clean 的作用
  10. 计算机技术在生物学中的应用鲁东大学,生物科学与技术学院
  11. woocommerce 下单失败也会清空购物车
  12. Java数据结构与算法(二)
  13. Lect1 String相关题目
  14. 微软学生中心DreamSpark
  15. 新型4-(3H)-喹唑啉酮类作为VEGFR-2抑制剂对肝癌细胞具有潜在活性
  16. 红帽 linux 安装gns3,GNS3 on Centos / Redhat / Fedora源码安装
  17. web前端css伪元素使用阿里iconfont中Unicode编码
  18. 书到用时方恨少,收集并不断积累资源【不断更新】
  19. 如何向MongoDB数据库导入数据
  20. 计算机检索功能如何操作,请问如何设置电脑搜索

热门文章

  1. Windows xp 定时关机
  2. mysql 递减查询_Sql实现递减查询
  3. 计算机2级可以搞小抄吗,计算机二级excel公式总结小抄
  4. 送给女朋友的小礼物(程序员)
  5. Unity的Realtime GI, Probe Volumes, LOD Groups
  6. 【胡学长 带你学 Global Mapper 】谷歌历史影像下载方法
  7. Aigtek线束测试仪,ATX-3000台式线束测试仪
  8. Omni(USDT)钱包安装(ubuntu)
  9. 主板点不亮 复位BIOS_小白莫慌,一文带你玩转主板BIOS!(上)
  10. 微信公众平台开发教程(一)