<二>读<<大话设计模式>>之策略模式

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

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

读过上篇文章《《简单工厂模式》》的知道,它有两个缺点: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

时间: 2024-10-13 16:01:15

&lt;二&gt;读&lt;&lt;大话设计模式&gt;&gt;之策略模式的相关文章

&amp;lt;十二&amp;gt;读&amp;lt;&amp;lt;大话设计模式&amp;gt;&amp;gt;之状态模式

对于状态模式,<<大话设计模式>>是以人从上班到下班到加班的状态来展开讲述的.状态模式事实上就是某一个对象在某个过程或者时间的一个状态记录,可是这个状态的顺序不能发生变化.在程序设计方面可能要比其它模式略微复杂点,请待我慢慢将来. 本人喜欢用代码来形象的讲述原理,可能是由于对单纯的看些理论的书有些反感或者无趣吧.我希望以后的教育也如此,要不大家都不高考了. . .嘿嘿说多了 状态模式:当一个对象的内在状态改变时同意改变其行为.这个对象看起来像是改变了其类. 还是代码呈现吧.概念太抽

大话设计模式读书笔记2——策略模式

策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类直接的耦合. UML 图: 根据<大话设计模式>——第二章 商场促销这个案例代码来简单的记录一下策略模式的使用方式: /// <summary> /// 现金收费抽象类 /// </summary> public abstract class CashSuper { /// <summary> ///

&amp;lt;四&amp;gt;读&amp;lt;&amp;lt;大话设计模式&amp;gt;&amp;gt;之代理模式

代理模式我想大家即便不熟悉也都听过吧,从字面意思上看就是替别人干活的,比方代理商.在项目的实际应用中也有非常多地方用到.比方spring通过代理模式生成对象等. 代理模式的书面定义:为其它对象提供一种代理以控制对这个对象的訪问. 在某些情况下,一个对象不适合或者不能直接引用还有一个对象,而代理对象能够在client和目标对象之间起到中介的作用. 在<<大话设计模式>>一书中以一个有男朋友的女孩让"小菜"帮忙修电脑的故事展开的,事实上说白了代理就是帮别人干活的,一

&lt;五&gt;读《《大话设计模式》》之工厂模式

怎么又是工厂模式呢?上次不是讲过简单工厂模式吗?不错,此工厂模式非彼工厂模式. 工厂模式:定义一个用于创建对象的接口,让子类决定实例化那一个类,工厂方法是一个类的实例化延迟到其子类. 还是以代码来进行比较吧 1.操作接口,与简单工厂模式一样 publicabstractclass Operation { publicdoublenumberA; publicdoublenumberB; publicabstractdouble getResult(); } 2.相加.相减类与简单工厂模式一样 p

《大话设计模式》 --- 第二章 策略模式

面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类. 策略模式:定义了算法,分别封装,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户. 策略模式是一种定义一系列算法的方法,从概念上看,所有这些算法完成的都是相同的工作,只是实现不同,他可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合. 策略模式中普通算法的策略类为环境定义了一系列可供重用的算法或行为.继承有助于析出出这些算法中的公共功能.

大话设计模式读书笔记--2.策略模式

面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类 定义 它定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户 模式结构 Strategy: 定义所有支持算法的公共接口 ConcreteStrategy: 封装了具体的算法或行为,也就是具体的策略 Context:是算法对象工厂, 维护一个Strategy对象的引用, 产生具体算法对象 模式实现 场景:模拟商城收银软件,营业员根据客户所

大话设计模式C++版——抽象工厂模式

前面说过,简单工厂模式是最基础的一种设计模式,那以工厂命名的设计模式就是23种设计模式中最多的一种,他们一脉相承,一步一步进化而来,这里就是其中的最后一种--抽象工厂模式(Abstract Factory),其是在工厂方法模式的基础上改进而来,如果没有弄明白工厂方法模式的同学请先观看<大话设计模式C++版--工厂方法模式>. 为什么会有抽象工厂模式?抽象工厂模式是简单工厂模式缺陷的终极解决方式么?NO,抽象工厂模式并不是为了解决简单工厂模式的缺陷而活着,它是因为有新的使命而诞生. 一个简单的例

大话设计模式C++版——工厂方法模式

工厂方法模式是以简单工厂模式为基础的,如果未了解简单工厂模式的同学可先浏览<大话设计模式C++版--简单工厂模式>.在简单工厂模式中,提到过简单工厂模式的缺陷,即违背了开发-封闭原则,其主要原因是由于switch的判断结构的使用,使修改或添加新的对象时需要改动简单工厂类的代码,不符合开放-封闭原则,那么工厂方法模式会在那方面有所改进呢?我们仍以简单工厂模式中加减法计算器为例. 1.保持简单工厂模式的 IOperation 接口和实现对象(COperation_Add 和 COperation_

C#设计模式之十九策略模式(Stragety Pattern)【行为型】

原文:C#设计模式之十九策略模式(Stragety Pattern)[行为型] 一.引言 今天我们开始讲"行为型"设计模式的第七个模式,该模式是[策略模式],英文名称是:Stragety Pattern.在现实生活中,策略模式的例子也非常常见,例如,在一个公司中,会有各种工作人员,比如:有的是普通员工,有的是软件架构师,有的是部门经理,当然也会有公司的CEO.这些工作人员负责的工作不同,担负的责任不同,自然得到的报酬也就不同了.每种工作人员都有自己的工资,但是每个工种的工作人员的工资的