浅写策略模式,及map、枚举结合小例子
import java.util.HashMap; import java.util.Map;public class Test1 {/*** 我在思考 为什么要用策略模式,只是对行为做一些封装,调用 还是需要根据条件来判断选择哪种行为,经过写一段代码后有了一点小小的心得* 优点:行为封装 模块化,支持开闭原则,调用很简洁* 缺点:需要写一大堆行为实现类,并自行选择那种实现类* 如果结合map或者枚举能实现很优雅的code* 下面有利用策略模式实现的3个小例子分享给大家* main 常用策略模式* main1 策略模式与map结合后的* main2 策略模式与枚举结合后的*/public static void main1(String[] args) {BookMark b1 = new BookMark(new MenberVVip());BookMark b2 = new BookMark(new MenberVip());BookMark b3 = new BookMark(new MenberNoVip());System.out.println("hello i want bug some book");System.out.println("hello i am vvip:"+b1.safe(100D,2));System.out.println("hello i am vip:"+b2.safe(100D,2));System.out.println("hello i am novip:"+b3.safe(100D,2));}public static void main2(String[] args) {BookMarkplus b = new BookMarkplus();System.out.println("hello i want bug some bookplus");System.out.println("hello i am vvip:"+b.safe("vvip",100D,2));System.out.println("hello i am vip:"+b.safe("vip",100D,2));System.out.println("hello i am novip:"+b.safe("novip",100D,2));}public static void main(String[] args) {System.out.println("hello i want bug some bookplus");System.out.println("hello i am vvip:"+SafeBookEnum.getEnumByType("vvip").safeBook.safe(100D,2));System.out.println("hello i am vip:"+SafeBookEnum.getEnumByType("vip").safeBook.safe(100D,2));System.out.println("hello i am novip:"+SafeBookEnum.getEnumByType("novip").safeBook.safe(100D,2));} }class BookMark{SafeBook safeBook ;BookMark(){}BookMark(SafeBook safeBook){this.safeBook = safeBook ;}public Double safe(Double price, Integer count){return this.safeBook.safe(price,count);} }class BookMarkplus{public static Map<String,SafeBook> c = new HashMap<>();static {c.put("vvip",new MenberVVip());c.put("vip",new MenberVip());c.put("novip",new MenberNoVip());}public Double safe( String type, Double price, Integer count){return c.get(type).safe(price,count) ;} }class BookMarkplusplus{public static Map<String,SafeBook> c = new HashMap<>();static {c.put("vvip",new MenberVVip());c.put("vip",new MenberVip());c.put("novip",new MenberNoVip());}public Double safe( String type, Double price, Integer count){return c.get(type).safe(price,count) ;} }abstract class SafeBook{abstract Double safe(Double price ,Integer count); }class MenberVVip extends SafeBook {@OverrideDouble safe(Double price, Integer count) {return price*count*0.8;}}class MenberVip extends SafeBook {@OverrideDouble safe(Double price, Integer count) {return price*count*0.9;}}class MenberNoVip extends SafeBook {@OverrideDouble safe(Double price, Integer count) {return price*count;}}//枚举类的处理enum SafeBookEnum{VVIP("vvip",new MenberVVip()),VIP("vip",new MenberVip()),NOVIP("novip",new MenberNoVip()) ;public String menberType ;public SafeBook safeBook ;SafeBookEnum(String menberType ,SafeBook safeBook){this.menberType = menberType ;this.safeBook = safeBook ;}public String getMenberType() {return menberType;}public void setMenberType(String menberType) {this.menberType = menberType;}public SafeBook getSafeBook() {return safeBook;}public void setSafeBook(SafeBook safeBook) {this.safeBook = safeBook;}public static SafeBookEnum getEnumByType(String type){for(SafeBookEnum entity : SafeBookEnum.values()){if(type.equals(entity.getMenberType())){return entity;}}return null;} }
浅写策略模式,及map、枚举结合小例子相关推荐
- [设计模式] ------ 策略模式实战:java中替代if-else的大段逻辑
java中用策略模式替代if-else的大段逻辑 问题: java本来是一门以面向对象为主的语言,但很多人嘴上说着java面向对象,然后除了表映射实体之外,其他的还是面向过程的思路. 就比如今天要说的 ...
- 2.商场促销 - 策略模式 (大话设计模式Kotlin版)
编程题:制作商场收银软件 利用编程做一个简易的商场收银系统,营业员根据客户购买的商品的单价与数量,向客户收费. 快速实现 马上想到的解决思路:无非是提供两个输入,分别对应商品单价与数量,然后通过计算得 ...
- 橘子学设计模式之策略模式
策略模式 1.简介 俗话说:条条大路通罗马.在很多情况下,实现某个目标的途径不止一条,例如我们在外出 旅游时可以选择多种不同的出行方式,如骑自行车.坐汽车.坐火车或者坐飞机,可根据实 际情况(目的地. ...
- 别在再满屏的 if、else 了,试试策略模式,真香!!
你还在写满屏的 if/ else/ switch 之类的判断逻辑吗? 栈长在开发人员的代码中看过太多这样的低级代码了,真的太 low,极不好维护,本文栈长就教你如何用策略模式干掉 if/ else/ ...
- 利用策略模式结合alibaba/alpha框架优化你的图片上传功能
图片上传作为一个App经常用到的功能,项目中可以使用各种成熟的框架去完成,但往往实际的情况比想象的复杂.假设我们的上传功能需要满足下面的情况: 支持上传一张图 支持上传多张图 上传多张图时能获取到每张 ...
- Android使用的设计模式2——策略模式
今天讲解一下策略模式,策略模式也是很常用的设计模式,对多种算法或者数据结构选择使用的情况下,经常会使用策略模式来管理这些算法.下面会简单讲解一下策略模式的概念和基本实现.然后结合Android里面的实 ...
- 从诸葛亮的三个锦囊妙计谈策略模式
从诸葛亮的三个锦囊妙计谈策略模式 话说当年东吴孙权为刘备借走了荆州不还而耿耿于怀,却不料甘夫人去世,周郎顿时计上心来,让孙权将其妹嫁与刘备,骗刘备来东吴完婚.刘备又不是傻子,当然知道其中的猫腻,当即表 ...
- 利用策略模式与装饰模式扩展JavaScript表单验证功能
tip:有问题或者需要大厂内推的+我脉脉哦:丛培森 ٩( 'ω' )و [本文源址:http://blog.csdn.net/q1056843325/article/details/55097262 ...
- java模板/策略模式打怪兽
目录 小故事: 一起打怪兽 模板&策略模式 常规方式 模板模式 策略模式 相似: 差异: 小故事: 一起打怪兽 有个记者去光之国采访一群奥特曼,他问迪迦奥特曼:"你每天都干什么?&q ...
最新文章
- 利用nginx搭建RTMP视频点播、直播、HLS服务器
- python 基础 -- python 模块
- Squeeze Net
- android编辑框最大字数,TextView 限制最大行数、最小行数、字数超过“...”表示...
- jsp 页面中文乱码解决(笔记)
- linux分割内容单引号,linux变量、cut_sort_wc_uniq_tee_tr_split 命令使用方法
- 算法总结之 打印二叉树的边界节点
- 多目标优化中常用的进化算法简介及原论文(最全概括)
- linux运行Windows模拟器,如何安装和使用Wine,以便在Linux上运行Windows应用程序?...
- 接口配置锦囊妙计之三----端口自协商
- wifi信号强度测试软件 mac,Wifi Signal Strength for Mac(无线WiFi信号强度统计软件)
- 深度学习论文: Compounding the Performance Improvements of Assembled Techniques in a CNN及其PyTorch实现
- OTA频发的“大数据杀熟”,想要治你不容易?
- UTONMOS数字藏品走红之后,为艺术打开了另一条路
- 心理实验应用计算机的优缺点,发展心理学研究方法发展的新趋势
- 微信退还钱什么时候到账?
- 【python】用tkinter做一个最近很火的强制表白神器
- 二分图的匹配——匈牙利算法
- MFC层次结构图Version 9.0
- 观《从你的全世界路过》