JAVA中的设计模式三(策略模式)

时间:2021-09-04 13:26:40
问题:
如何让算法和对象分开来,使得算法可以独立于使用它的客户而变化?
 
方案:
把一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口,然后在类中包含这个对象的实例,这样类的实例在运行时就可以随意调用实现了这个接口的类的行为。比如定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换,使得算法可独立于使用它的客户而变化。这就是策略模式。
 
 
适用情况:
许多相关的类仅仅是行为有异。 “策略”提供了一种用多个行为中的一个行为来配置一个类的方法。即一个系统需要动态地在几种算法中选择一种。当一个应用程序需要实现一种特定的服务或者功能,而且该程序有多种实现方式时使用。一个类定义了多种行为 , 并且这些行为在这个类的操作中以多个条件语句的形式出现。将相关的条件分支移入它们各自的Strategy类中以代替这些条件语句。
 
优点:
1、可以动态的改变对象的行为
缺点:
1、客户端必须知道所有的策略类,并自行决定使用哪一个策略类
2、策略模式将造成产生很多策略类
 
 应用:
我们平时出行的方式:出行方式有很多种,具体用哪一种根据动态的选择;
 
 首先创建我们的抽象行为类,和具体的行为类;
 package strategy;//策略模式

 //抽象的行为类
public interface Strategy {
public void go();//出行方式
} package strategy; public class ConcreteStrategy1 implements Strategy {//具体的出行方式 @Override
public void go() {
// TODO Auto-generated method stub
System.out.println("坐公交车!");
} } package strategy; public class ConcreteStrategy2 implements Strategy {//具体的出行方式 @Override
public void go() {
// TODO Auto-generated method stub
System.out.println("自驾车!");
}
}

然后创建一个调用者,也就是使用者,把能使用的行为给导入进来;

 package strategy;

 public class Context {//环境类其实也就是一个调用类,出行的人
private Strategy s; public Context(Strategy s) {
super();
this.s = s;
}
public void operate(){
s.go();
}
}

最后就是进行出行了;

 package strategy;

 public class Test {
public static void main(String[] args) {
Context c =new Context(new ConcreteStrategy1());
c.operate(); c =new Context(new ConcreteStrategy2());
c.operate();
}
}
 JAVA中的设计模式三(策略模式)
 
 
 
 
 

JAVA中的设计模式三(策略模式)的更多相关文章

  1. springboot项目中使用设计模式一策略模式

    策略模式: 使用常用,支付,之前做了微信支付,支付宝支付,然后另外一个同事写了一个银联支付,那么如果代码方法一起就会导致代码不是很好操作所以,采用策略模式进行,同事只需要写一个实现类,就可以了, 在协 ...

  2. JavaScript中的设计模式:策略模式

    无论学习前端还是后端设计模式是作为一名程序员不可缺少的知识,就像下底传中对于一个边锋来说. 一.策略模式 策略模式给人的第一感觉就是在代码里面消除了很多if-else分支语句,比如一个求员工奖金的程序 ...

  3. JS 设计模式三 -- 策略模式

    策略模式 概念 定义一系列算法,把它们一个个封装起来. 将算法的使用与算法的实现分离开来 实现 // 加权映射关系 var levelMap = { S: 10, A: 8, B: 6, C: 4 } ...

  4. 【设计模式】【应用】使用模板方法设计模式、策略模式 处理DAO中的增删改查

    原文:使用模板方法设计模式.策略模式 处理DAO中的增删改查 关于模板模式和策略模式参考前面的文章. 分析 在dao中,我们经常要做增删改查操作,如果每个对每个业务对象的操作都写一遍,代码量非常庞大. ...

  5. JAVA 设计模式之策略模式

    定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换. 类型:行为类模式 策略模式是对算法的封装,把一系列的算法分别封装到对应的类中,并且这些类实现相同的接口,相互之间可以替换.在前面说过 ...

  6. JavaScript设计模式之策略模式(学习笔记)

    在网上搜索“为什么MVC不是一种设计模式呢?”其中有解答:MVC其实是三个经典设计模式的演变:观察者模式(Observer).策略模式(Strategy).组合模式(Composite).所以我今天选 ...

  7. Java中单态设计模式

    Java中单态设计模式 2011-09-23 16:38:46|  分类: Java |  标签:technology!  |举报|字号 订阅     此博文是转自新浪博客中一名叫做"俊俊的 ...

  8. [design-patterns]设计模式之一策略模式

    设计模式 从今天开始开启设计模式专栏,我会系统的分析和总结每一个设计模式以及应用场景.那么首先,什么是设计模式呢,作为一个软件开发人员,程序人人都会写,但是写出一款逻辑清晰,扩展性强,可维护的程序就不 ...

  9. 设计模式之策略模式和状态模式(strategy pattern & state pattern)

    本文来讲解一下两个结构比较相似的行为设计模式:策略模式和状态模式.两者单独的理解和学习都是比较直观简单的,但是实际使用的时候却并不好实践,算是易学难用的设计模式吧.这也是把两者放在一起介绍的原因,经过 ...

随机推荐

  1. WPF MVVM框架下,VM界面写控件

    MVVM正常就是在View页面写样式,ViewModel页面写逻辑,但是有的时候纯在View页面写样式并不能满足需求.我最近的这个项目就遇到了,因此只能在VM页面去写样式控件,然后绑定到View页面. ...

  2. iOS强制横屏

    由于项目需求,需要整个项目页面都是竖屏,唯独一个折线图页面强制性横屏显示. 网上逛了许多帖子,也看了好多大神的提供的方法,都没能够实现本屌丝想要的效果.没办法自己研究自己搞,借鉴各路大神的思路,最后费 ...

  3. 全球2/3的DNS瘫痪 *域名根服务器故障

    1月21日下午消息,据多家DNS服务商透露,今日下午3点,全国所有通用*域的根出现异常,导致部分国内用户无法访问.com域名网站,对全国互联网链接造成系统性影响.   根服务器主要用来管理互联网的主 ...

  4. Pre-Query trigger in Oracle D2k / Oracle Forms

    Pre-Query trigger in Oracle D2k / Oracle Forms DescriptionFires during Execute Query or Count Query ...

  5. C++ CheckBox_Porerty

    主题 1. s       Caption属性 CheckBox   CheckDlgButton BOOL CheckDlgButton(      HWND hDlg,      // handl ...

  6. php 初学笔记

    1.变量定义和使用 php中定义变量名为:$aa 在类中一般定义一个新变量需要添加var字,如var $aaa. 但是过程或函数中是不需要添加var 关键字,如$aaa=$_POST['aaaa'], ...

  7. Sass与Compress实战:第七章

    概要:将介绍Compass如何让你从本地开发原型轻松转移到生产环境的网址或Web应用中. 本章内容: ● 生成资源URL的最佳实践 ● 撰写无需Web服务器的样式表 ● 在浏览器中进行设计的技巧 ● ...

  8. IOS之富文本编辑

    之前做项目时遇到一个问题:          使用UITextView显示一段电影的简介,由于字数比较多,所以字体设置的很小,行间距和段间距也很小,一大段文字挤在一起看起来很别扭,想要把行间距调大,结 ...

  9. ArcGIS发布地图服务时报错Error: ArcGIS Server site is currently being configured by another administrative operation. Please try again later.

    2017-06-06试图发布ArcGIS Server站点托管的服务时,返回以下错误消息: ERROR: Service 'test'.'MapServer' in folder '/' is cur ...

  10. spring项目启动时执行任务

    https://www.jianshu.com/p/745868a34379