设计模式----策略模式
定义
策略模式定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。
设计原则
- 找出应用中可能需要变化的部分,把它们独立出来,不要和那些不需要变化的代码混在一起。
- 针对接口编程,而不是针对实现编程。
- 多用组合,少用继承。
代码demo
鸭子基类
public abstract class Duck {public FlyBehavior fly;public void setFly(FlyBehavior fly){this.fly=fly;}public void quack(){System.out.println("鸭子叫。。。。。。。。。。。。。。");}public void swim(){System.out.println("鸭子游泳.............");}public void performFly(){fly.fly();}public abstract void display();
}
飞行方法抽象类
public interface FlyBehavior {public void fly();
}
飞行方法的几个具体实现(算法族)
public class FlyFast implements FlyBehavior{public void fly() {System.out.println("我飞的特别快");}}
public class Flynoway implements FlyBehavior{public void fly() {System.out.println("我不会飞");}}
public class FlySlow implements FlyBehavior{public void fly() {System.out.println("我飞的比较慢");}}
鸭子子类的具体实现
public class RedheadDuck extends Duck{public RedheadDuck(FlyBehavior fly) {super.fly = fly;}@Overridepublic void display() {System.out.println("我的颜色是红色");}}
public class MollaryDuck extends Duck{public MollaryDuck(FlyBehavior fly) {super.fly = fly;}@Overridepublic void display() {System.out.println("我是绿头鸭子");}}
测试
public class Unittest {public static void main(String[] args) {FlyFast ffast = new FlyFast();FlySlow fslow = new FlySlow();Flynoway fno = new Flynoway();Duck rduck = new RedheadDuck(fslow);rduck.display();rduck.performFly();rduck.swim();rduck.quack();}
}
代码解读
良好的OO设计必须具备可复用、可扩充、可维护三个特性。
设计模式----策略模式相关推荐
- Python设计模式-策略模式
Python设计模式-策略模式 代码基于3.5.2,代码如下; #coding:utf-8 #策略模式class sendInterface():def send(self,value):raise ...
- 关于设计模式——策略模式-Strategy Pattern
文章目录 1 策略模式 1.1 模拟鸭子 1.2 设计原则 1.3 整合行为 1.4 模拟鸭子代码的代码 1.5 动态设定行为 1.6 重新查看整体 1.7 继承和组合 1.8 总结 1.9 优劣期间 ...
- [设计模式] ------ 策略模式
策略模式 它定义了算法家族,分别封装起来,让他们直接可以互相替换,此模式让算法的变化,不会影响到使用算法的客户 其实很简单,可能很多人都用到了,只不过还不知道这就是策略模式而已. 比如定义一个接口A, ...
- java 策略模式 促销_java设计模式——策略模式
一. 定义与类型 定义:针对一组算法,将每一种算法都封装到具有共同接口的独立的类中,从而是它们可以相互替换.策略模式的最大特点是使得算法可以在不影响客户端的情况下发生变化,从而改变不同的功能.当代码中 ...
- Springboot 使用设计模式- 策略模式
前言 直白点,什么场景我们需要使用到设计模式- 策略模式. 在平常的springboot项目里面做CRUD,我们的习惯性基本是 一个mapper,一个service,一个serviceImpl. 但是 ...
- 李建忠设计模式——策略模式Strategy
目录 1.策略模式定义 1.动机 2.模式定义 3.结构 2.实现例子 1.问题描述 2.代码实现 3.要点总结 4.参考 1.策略模式定义 1.动机 软件构建过程中,某些对象使用的算法可能多种多样, ...
- 15. 星际争霸之php设计模式--策略模式
题记 ============================================================================== 本php设计模式专辑来源于博客(jy ...
- Java设计模式-策略模式作业
Java设计模式-策略模式作业,所有类和接口均在一个package内 文章目录 前言 一.作业内容 二.具体实现 1.类图 2.Strategy接口 3.PreCopyStrategy类 4.Post ...
- 设计模式-策略模式2.0
设计模式-策略模式2.0 前面文章我们说过了传统的策略模式的实现,本文我们简单说下设计模式中的升级版的策略模式,策略模式2.0. 代码实现 talk is cheap show me the code ...
- 设计模式-策略模式(Strategy)-Java
设计模式-策略模式(Strategy)-Java 目录 文章目录 1.前言 2.示例案例-电影票打折方案 3.策略模式概述 3.1.策略模式定义 3.2.策略模式结构 3.3.策略模式结构图中角色 3 ...
最新文章
- 2018专业创业赛事服务平台
- 记录一个坑的解决历程
- hdu 2842 Chinese Rings 矩阵快速幂
- 什么是你的不可替代性和核心竞争力
- hive中存Array类型的数据的案例,将字符串的数组格式转成数组的字符串,自定义函数方式处理‘[12,23,23,34]‘字符串格式的数据为array<int>格式的数据。
- html5长按保存,iOS UIWebView仿微信H5页面实现长按保存图片功能
- AngularJs出现错误Error: [ng:areq]
- CSS节选——选择器
- git修改服务器的命令行,Git版本控制工具安装及命令行操作
- idea给main方法附带参数
- layUI日期格式转换
- 【图像跟踪】基于matlab GUI均值漂移图像跟踪【含Matlab源码 743期】
- maven导入ojdbc14.jar
- 四叶草启动引导配置工具 !Clover Configurator中文版下载!
- python分词基础
- gmail如何设置邮箱别名
- JDK源码解析之HashSet
- 软件测试人员必备的60个测试工具,果断收藏了!
- HDU 5602 Black Jack (记忆化搜索+DP)*
- 【踩坑记录】导航时出现原地旋转,然后无法执行导航