Design Pattern --- (1)Stragety pattern 策略模式

策略模式:定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。

设计原则:找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。

设计原则: 针对接口编程,而不是针对实现编程

此设计原则涉及到面向对象编程中一个极其重要的特点:多态。具体说,就是父类指针指向子类对象。一个对象Has a Interface,并针对此接口编程。

而在实例化时,可以让此接口指向任一实现了此接口的子类对象。

父类Duck,持有飞行行为FlyBehavior及呱呱叫行为QuackBehavior的两个指针

 1 package Duck20160802;
 2
 3 //Duck类为所有鸭子对象的父类
 4
 5 public abstract class Duck {
 6     FlyBehavior flyBehavior;
 7     QuackBehavior quackBehavior;
 8
 9     public Duck(){
10
11     }
12
13     public void performFly(){
14         flyBehavior.fly();
15     }
16
17     public void performQuack(){
18         quackBehavior.quack();
19     }
20
21     public void swim(){
22         System.out.println("All ducks float,even decoys!");
23     }
24
25 }

MallardDuck继承了Duck,并将FlyBehavior及QuackBehavior指定为具体的飞行和呱呱叫行为

 1 package Duck20160802;
 2
 3 //红头鸭MallardDuck继承父类Duck,并将quackbehavior制定为Quack方法
 4 //flyBehavior指定为FlyWithWings方法
 5
 6 public class MallardDuck extends Duck {
 7     public MallardDuck(){
 8         quackBehavior = new Quack();
 9         flyBehavior = new FlyWithWings();
10     }
11
12     public void display(){
13         System.out.println("I‘m a real Mallard duck!");
14     }
15
16 }

所有的文件

可以继续扩展FlyBehavior和QuackBehavior,但不用修改Duck类

设计原则:多用组合,少用继承

时间: 2024-10-10 04:20:34

Design Pattern --- (1)Stragety pattern 策略模式的相关文章

Strategy Pattern ava设计模式之策略模式

简介 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改.这种类型的设计模式属于行为型模式.简单理解就是一组算法,可以互换,再简单点策略就是封装算法. 意图 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换. 主要解决 在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护. 何时使用 一个系统有许多许多类,而区分它们的只是他们直接的行为. 如何解决 将这些算法封装成一个一个的类,任意地替换. 主要角色 上下文Context,

Head First Design Pattern 读书笔记(1) 策略模式

Head First Design Pattern 读书笔记(1) Strategy Pattern 策略模式 这几天为了锻炼看英语文档的能力,开着有道硬着头皮看 <Head First Desgin Pattern>的原版书,顺便做下笔记,把里面提到的每个模式通过回忆的方式画出来复习并记下来总结下学习成果=.= 关于设计模式 使用设计模式是为了增强程序的复用性,拓展性,易维护性. 设计模式会增加程序代码的复杂度,并不是所有情况都必须使用设计模式,需要根据需求以及经验评估使用场景. 学习并掌握

策略模式 C++实现

策略(Strategy)模式 Strategy pattern in LePUS3 (legend)     策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法,比如每个人都要“交个人所得税”,但是“在美国交个人所 得税”和“在中国交个人所得税”就有不同的算税方法.策略模式让算法独立于使用它的客户而独立变化. 其主要实现方法就是将某些某些功能属性从目标对象中解耦出来构成单独的功能对象,目标对象可以根据需求组合不同的功能对象.下面示例将鸭子的飞行和呱呱叫功能

C++ 之 策略模式

1  会飞的鸭子 Duck 基类,包含两个成员函数 (swim, display):派生类 MallardDuck,RedheadDuck 和 RubberDuck,各自重写继承自基类的 display 成员函数 class Duck { public: void swim(); virtual void display(); }; class MallardDuck : public Duck { public: void display(); // adding virtual is OK

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

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

Strategy Design Pattern(策略模式)

策略模式意义在于,当我们有多种不同的算法时,程序能够动态的选择算法进行计算. 策略模式的另外一个英文名字是Policy Strategy. 策略模式最典型的里一个例子就是JAVA中复杂对象的排序(java.util.Arrays.sort,java.util.Collections.sort),用户可以自己定义各种排序算法(规则),然后在需要排序时将算法传给排序函数.从而实现排序方式的变化,获得不同的排序结果.参见:http://my.oschina.net/nox/blog/487478 下面

C#设计模式(20)——策略者模式(Stragety Pattern)

一.引言 前面主题介绍的状态模式是对某个对象状态的抽象,而本文要介绍的策略模式也就是对策略进行抽象,策略的意思就是方法,所以也就是对方法的抽象,下面具体分享下我对策略模式的理解. 二.策略者模式介绍 2.1 策略模式的定义 在现实生活中,策略模式的例子也非常常见,例如,中国的所得税,分为企业所得税.外商投资企业或外商企业所得税和个人所得税,针对于这3种所得税,针对每种,所计算的方式不同,个人所得税有个人所得税的计算方式,而企业所得税有其对应计算方式.如果不采用策略模式来实现这样一个需求的话,可能

C#设计模式:策略者模式(Stragety Pattern)

策略模式:针对同一命令或行为,不同的策略做不同的动作. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace StrategyDesign { class Program { static void Main(string[] args) { StrategyContext context = new StrategyContext(); //设置"随机策略&

深入浅出设计模式——策略模式(Strategy Pattern)

模式动机 完成一项任务,往往可以有多种不同的方式,每一种方式称为一个策略,我们可以根据环境或者条件的不同选择不同的策略来完成该项任务.在软件开发中也常常遇到类似的情况,实现某一个功能有多个途径,此时可以使用一种设计模式来使得系统可以灵活地选择解决途径,也能够方便地增加新的解决途径. 在软件系统中,有许多算法可以实现某一功能,如查找.排序等,一种常用的方法是硬编码(Hard Coding)在一个类中,如需要提供多种查找算法,可以将这些算法写到一个类中,在该类中提供多个方法,每一个方法对应一个具体的