java设计模式 策略
什么是策略设计模式?
- 世界永远都在变,唯一不变的就是变本身
- 举个生活中的例子,小时候玩的游戏中,Sony的PSP提供了统一的卡槽接口,玩家只要更换卡带就可以达到更换游戏的目的,做到了一机多用
- 特工执行任务时针对不同的情况也有plan A, plan B, plan C
- 话说有一个Computer类,一个USB接口,还有各种USB设备,故事就这样开始了。
- Computer:“我上面装有一个USB接口,我只认识这个接口传递过来的数据,谁要跟我沟通你就去找它吧。”
- USB:“要接驳我的设备是什么我不关心,但我规定设备必须有readData()这个方法,但是怎么实现我不管,总之你得通过这个方法把数据给我。”
- Keyboard:“我有readData()这个方法,我已经实现好了,用户一敲键盘我就读过来传给你。 O(∩_∩)O。”
- Mouse&Camera:“我也是,我也是,我要插!”
- USB:“确实多态,够变态。”
- 我们来看一下代码部分,接口部分
public interface USB {
public void readData(String data);
}
- 下面是三个不同设备鼠标,键盘,相机实现的不同读写数据的策略
public class Mouse implements USB {
@Override
public void readData(String data) {
System.out.println("read data from mouse: " + data);
}
}
public class Keyboard implements USB {
@Override
public void readData(String data) {
System.out.println("read data from keyboard: " + data);
}
}
public class Camera implements USB {
@Override
public void readData(String data) {
System.out.println("read data from camera: " + data);
}
}
- 具体电脑该如何接入USB接口呢?
public class Computer {
private USB usb; // 拥有某种USB策略
public void setUsb(USB usb) { // 接入某种规格的USB
this.usb = usb;
}
public void read(String data) {
this.usb.readData(data);
}
}
- 看下该如何来调用
class Client {
public static void main(String[] args) {
Computer computer = new Computer();
computer.setUsb(new Keyboard());
computer.read("ABC");
computer.setUsb(new Mouse());
computer.read("click");
computer.setUsb(new Camera());
computer.read("capture");
}
}
- 一开始写这个练习的时候,有点绕不过来,电脑通过USB接口来读键盘输入的字符,可是应该在哪里把数据传送给键盘呢?难道是在接口实现类Keyboard类中加一个属性变量来表示数据,然后在构造函数中直接赋值?这样写的话,就是很明显的数据流是从键盘流到电脑了,但好像又不太合适,就采用了这种写法
- 原文出处
java设计模式 策略的更多相关文章
- java设计模式 策略模式Strategy
本章讲述java设计模式中,策略模式相关的知识点. 1.策略模式定义 策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户.策略模式属于对象的 ...
- JAVA 设计模式 策略模式
用途 Title 它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户. 策略模式是一种行为型模式. 结构
- 我的Java设计模式-策略模式
今天给大家说说田忌赛马的故事.如有雷同,纯属巧合!话说在战国时期,群雄割据,硝烟四起,茶余饭后还是少不了娱乐活动的,其中赛马是最火爆的.一天,孙膑看到田忌像个死鸡似的就知道肯定赛马又输给了齐威王,立马 ...
- Java设计模式-策略模式详解
前言 在软件领域中,设计模式作为一种经典的开发实践常常需要我们去深入的理解,而策略模式作为设计模式的一种,使用频率也是相对来说比较高的,在Java中,当我们学习TreeSet集合的时候,就采用了经典的 ...
- Java设计模式—策略模式
1.策略模式(Strategy Pattern)是一种比较简单的模式,也叫做政策模式(PolicyPattern). 定义如下: Define a family of algorithms,e ...
- Java 设计模式--策略模式,枚举+工厂方法实现
如果项目中的一个页面跳转功能存在10个以上的if else判断,想要做一下整改 一.什么是策略模式 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理,最终可以实现解决 ...
- java设计模式--策略模式
策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 本文地址:http:// ...
- Java设计模式-策略模式(strategy)
策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户.需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口,设计一个抽象类(可有可无 ...
- Java设计模式——策略模式
策略模式的定义: 策略模式其实特别好理解,俗话说得好,条条大路通罗马,做的都是一件事,实现的方式却可以千万种,在这种情况下,如何使得每个人都可以根据自己的喜好来选择具体的方式,在调用时可以根据不同方式 ...
随机推荐
- mysql 内存体系结构--session
体系结构tmp_table_size & max_heap_table_size ,这个是会话级的内存结构mysql使用总内存 = global_buffers + thread_buffer ...
- javascript知识
JavaScript概述 JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEase.( ...
- PCB上 如何显示 汉字
原理图上有汉字,那如何在PCB上显示汉子呢 ? 而不至于显示乱码 按如下操作 ,双击乱码 ,进入设置模式 设置好后,显示的字体样式.
- SqlServer——for xml path
for xml path 就是将 sql 查询出来的内容以XML的格式显示出来.参考网站MSDN:将 PATH 模式与 FOR XML 一起使用. 先创建测试用的表格: create table SZ ...
- 使用K2时提示未能加载文件或程序集Microsoft.IdentityModel等
转:http://www.cnblogs.com/dannyli/archive/2012/10/15/2724931.html K2安装成功后,打开workspace管理流程时报错如下图: 未能加载 ...
- leetcode893
class Solution { public: int numSpecialEquivGroups(vector<string>& A) { set<string> ...
- webRTC peerconnection_client demo创建VS工程
编译了webRTC Windows源码之后,想使用编译出来的库写一个demo出来,但是又不知到怎么下手.就想通过源码中带的示例peerconnection_client和peerconnection_ ...
- Lecture Sleep(前缀和)
Your friend Mishka and you attend a calculus lecture. Lecture lasts n minutes. Lecturer tells ai the ...
- 移植OK6410'S dm9000ae…
转载自:http://lagignition.blog.163.com/blog/static/12873002320110443341961/
- arm-linux-gcc-4.5.1的安装…
原文地址:arm-linux-gcc-4.5.1的安装方法作者:游牧 说明:我使用的是在虚拟机下的红帽linux5 ,通过终端工具SecureCRT操作,使用虚拟机等其他工具的过程大致相同 1.使用r ...