又和大家见面了。可以坚持写出第二篇文章真不错,好好加油。

<<大话设计模式>>解说策略模式是以商场收银软件程序开头的,那么问题来了。哪家商场收银软件强,开玩笑了。

读过上篇文章《《简单工厂模式》》的知道,它有两个缺点:1、client依赖两个类。耦合性高;2、假设算法过多则须要写非常多类。解决上面问题的就是策略模式了。

策略模式:它定义了算法家族。分别封装起来。让它们之间能够互相替换,此模式让算法的变化,不会影响到使用算法的客户。

商场收银软件:单位价格*打折算法=售价。对于这种软件来说,须要常常变化的是打折算法。其有用简单工厂模式全然能够的。直接添加打折算法,然后工厂生产实例对象就能够了。

可是这个模式知识解决对象创建问题,并且因为工厂本身包含了全部收费方式,商场是可能常常更改打折算法的,每次维护或扩展收费方式都要修改这个工厂。这样是很麻烦也不遵循易扩展、易复用原则。事实上分析一下该软件的变化点就是打折算法,我们仅仅要将这个变化点封装起来就行了,而策略模式可以做到这一点。

好了。上代码了。依据样例学习进步快

1、策略类,定义了全部算法实现的公共方法接口

/*

* 策略类

*/

publicabstractclass Strategy {

/*

* 定义全部算法的公共接口

*/

publicabstractvoid algorithmlnterface();

}

2、维护一个对Strategy类的引用。想调用那个类就调用那个类

/*

* 维护对strategy对象的引用

*/

publicclass Context {

Strategystrategy;

public Context(Strategy strategy){

this.strategy = strategy;

}

publicvoid contextInterface(){

strategy.algorithmlnterface();

}

}

3、算法a

publicclass ConcreteStrategyAextends Strategy {

@Override

publicvoid algorithmlnterface() {

//TODO Auto-generated method stub

System.out.println("this is algorithm a ;");

}

}

4、算法b

publicclass ConcreteStrategyBextends Strategy {

@Override

publicvoid algorithmlnterface() {

//TODO Auto-generated method stub

System.out.println("this is algorithm b ;");

}

}

5、client调用

publicclass StrategyClient {

/**

* @param args

*/

publicstaticvoid main(String[] args) {

//TODO Auto-generated method stub

/*

* 对照与工厂模式,该client只依赖于Context类,解耦更加彻底

* 添加一个算法只须要添加一个算法类就可以

*/

Contextcontext = new Context(new ConcreteStrategyA());

context.contextInterface();

//看到了吧。想要B算法就直接实例一下就能够调用它的方法了

Contextcontext2 = new Context(new ConcreteStrategyB());

context2.contextInterface();

}

}

总结:策略模式是一种定义一系列算法的方法,从概念上来看,全部这些算法完毕的都是同样的工作,仅仅是实现不同。它能够以同样的方式调用全部的算法,降低了各种算法类与使用算法类之间的耦合。

附上代码地址:http://download.csdn.net/detail/jzhf2012/8084405

转载于:https://www.cnblogs.com/llguanli/p/6737057.html

lt;二gt;读lt;lt;大话设计模式gt;gt;之策略模式相关推荐

  1. 大话设计模式(八 用“策略模式”是一种好策略)

    (续上篇) 小菜次日来找大鸟,说:"<深入浅出设计模式>的第一章我看完了,它讲的是策略模式(Strategy).『策略模式』定义了算法家族,分别封装起来,让它们之间可以互相替换, ...

  2. 设计模式初学者系列-策略模式 -------为什么总是继承

    设计模式初学者系列-策略模式                                                 -------为什么总是继承 模板方法的延续 这篇稿子是基于我的前一篇模板 ...

  3. 老王讲设计模式(一)——策略模式

    策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 老王最近接到一个工作,上 ...

  4. 设计模式(三)策略模式——在Spring中使用策略模式

    前言 在 设计模式(一)策略模式 -- 策略模式结构 和 设计模式(二)策略模式 -- 在程序中通过枚举使用策略模式 两篇博文中分析了策略模式的基础使用,在实际的项目开发中要结合spring容器使用策 ...

  5. 设计模式解读之一: 策略模式——鸭子游戏

    设计模式解读之一: 策略模式--鸭子游戏 当我们掌握了Java的语法,当我们了解了面向对象的封装.继承.多态等特性,当我们可以用Swing.Servlet.JSP技术构建桌面以及Web应用,不意味着我 ...

  6. 设计模式 by Python1:策略模式

    设计模式 by Python1:策略模式 最近开始重新看<Head First 设计模式>,作为一个不错的练习,打算在整理设计模式笔记的时候用Python实现. 作为第一个介绍的设计模式, ...

  7. C++设计模式学习笔记:策略模式

    C++设计模式学习笔记:策略模式 策略模式设计商场促销 1.策略模式介绍 2.商场收银系统策略模式实现 3.策略模式与工厂模式结合 3.策略模式与工厂模式对比 策略模式设计商场促销 1.策略模式介绍 ...

  8. 大话设计模式(8)模板方法模式

    一.场景及UML图 场景:有点类似于原型模式,不过侧重点不一样.模板方法重点是体现在代码复用.把一些重复性的机制代码全部抽离到父类. 二.概念 模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延 ...

  9. 大话设计模式Python实现-简单工厂模式

    简单工厂模式(Simple Factory Pattern):是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 下面使用简单工厂模式实现一个简单的四则运算 1 #!/us ...

最新文章

  1. 有哪些相见恨晚的学习算法的方法和技巧?学到了学到了!
  2. WinDBG加载符号表的一点心得体会
  3. java实现表锁行锁
  4. 如何验证本地磁盘或网络磁盘是否可以进行读写操作
  5. 第04篇 JDK版本导致Unsupported major.minor version 52.0 error
  6. php魔术方法__call
  7. GPU产品源代码被盗?AMD 证实称仅为测试文件
  8. FFmpeg源代码简单分析:结构体成员管理系统-AVClass
  9. 数据库连接字符串的写法(参考)
  10. 使用docker环境编译驱动
  11. spring任务调度的使用
  12. 自建私有云与公有云托管对比_云托管:利与弊
  13. 偏流角为什么是arcsin(w/V)
  14. Android-使用SimpleAdapter创建ListView
  15. 手把手教你用jQuery Mobile做相册
  16. 好用的ROS开发软件(持续更新~)
  17. 交出2021年进步答卷,挚文集团如何做到稳中求进?
  18. 自学通讯工程入门级_通信工程学习方法
  19. Hive2.1函数列表
  20. springboot毕设项目软件外包服务39e05(java+VUE+Mybatis+Maven+Mysql)

热门文章

  1. python代码写完怎么运行-Python 项目代码写完了,然后怎么打包和发布?
  2. python自学免费课堂-推荐5个Python爬虫免费学习资源(B站高赞!)
  3. 用python画简单的动物-世上最慢“动物”之一,为啥程序员却很爱它?
  4. python3爬虫入门教程-python3爬虫入门程序
  5. python贴吧爬虫-Python爬虫——抓取贴吧帖子
  6. python实现http下载文件-Python HTTP下载文件并显示下载进度条功能的实现
  7. python中return的理解-Python return语句 函数返回值
  8. vba和python哪个好学-python和vba学哪个
  9. python输入输出-Python3
  10. python 编程一日一练-2018-12-01:python每日一练(1)