package com.bruce.pattern.strategy;
import com.bruce.pattern.strategy.behavior.FlyBehavior;
import com.bruce.pattern.strategy.behavior.QuackBehavior;
public abstract class Duck
{
QuackBehavior quackBehavior;
FlyBehavior flyBehavior;
public abstract void display();
public void performFly()
{
flyBehavior.fly();
}
public void performQuack()
{
quackBehavior.quack();
}
public void setQuackBehavior(QuackBehavior quackBehavior) {
this.quackBehavior = quackBehavior;
}
public void setFlyBehavior(FlyBehavior flyBehavior) {
this.flyBehavior = flyBehavior;
}
}
package com.bruce.pattern.strategy;
public class MallardDuck extends Duck
{
@Override
public void display()
{
System.out.println("This is mallardDuck... ");
}
}
public interface FlyBehavior
{
void fly();
}
public class FlyWithWings implements FlyBehavior
{
@Override
public void fly()
{
System.out.println("Flying with wings!");
}
}
public class FlyNoWay implements FlyBehavior
{
@Override
public void fly()
{
System.out.println("Flying no way....");
}
}
package com.bruce.pattern.strategy;
import java.util.HashMap;
import java.util.Map;
import com.bruce.pattern.strategy.behavior.*;
public class Client {
/**
* @param args
*/
public static void main(String[] args)
{
Duck duck = new MallardDuck();
for(int i = 0;i<2;i++)
{
if(i == 0)
{
duck.setFlyBehavior(new FlyWithWings());
}
else
{
duck.setFlyBehavior(new FlyNoWay());
}
fly(duck);
}
Map<String, FlyBehavior> map = new HashMap<String, FlyBehavior>();
map.put("0", new FlyWithWings());
map.put("1", new FlyNoWay());
for(int i = 0;i<2;i++)
{
FlyBehavior flyBehavior = map.get(Integer.toString(i));
duck.setFlyBehavior(flyBehavior);
fly(duck);
}
}
public static void fly(Duck duck)
{
duck.performFly();
}
}
运行结果:
Flying with wings!
Flying no way....
Flying with wings!
Flying no way....
看到有帖子讨论这个,策略+表驱动法(Map),不错,哪天再结合工厂方法写个重构的例子,总结以后使用。
分享到:
相关推荐
在软件设计中,面对复杂的业务逻辑,特别是涉及多种条件判断的情况,传统的做法是使用if-else语句或者switch语句来实现。然而,随着需求的不断变化,这种做法可能导致代码结构变得臃肿且难以维护。在这种场景下,...
在编程实践中,遇到需要根据多种条件执行不同操作的情况,我们常常会使用`if-else`语句。然而,当条件分支过多时,`if-else`结构会导致代码变得冗长且难以维护,尤其是在大型项目中,这样的代码往往被称为“烂代码”...
原始的if-else语句如下: ```javascript const onButtonClick = (status) => { if (status == 1) { sendLog('processing') jumpTo('IndexPage') } else if (status == 2) { sendLog('fail') jumpTo('FailPage...
3. 避免条件表达式:用`case`语句或方法重写复杂的if/else结构,使代码更清晰。 4. 将重复代码提取到单个源:DRY(Don't Repeat Yourself)原则,避免代码重复。 四、代码风格指南 1. 缩进与空格:使用两个空格...
4. 避免过多的if-else语句:过多的嵌套if-else可能导致代码难以阅读。可以使用switch-case,枚举,或者策略模式来替代。例如,使用`Objects.requireNonNull(obj, "obj must not be null")`代替手动的null检查。 5. ...
- **if-else结构**:避免深度嵌套,超过3层考虑重构,推荐使用状态设计模式。 - **方法顺序**:类内方法顺序建议为:公有/保护方法>私有方法>getter/setter方法。 - **条件判断**:避免在if条件中执行复杂逻辑,...
1. **Java基础知识**:书中的示例代码涵盖了基本语法,如变量、运算符、控制流(if-else,for,while,switch)、类和对象、封装、继承、多态等。通过这些代码,初学者可以巩固对Java语言的理解,而有经验的开发者则...
- **控制结构**:包括if-else语句、switch-case语句以及循环结构(while、for、do-while)等。 **2. 面向对象编程** - **类与对象**:类是对象的抽象描述,包含了数据成员和成员函数;对象则是类的一个实例。 - **...
1. **C++基础**:书中首先介绍了C++的基础知识,包括变量、数据类型、运算符、流程控制语句(如if-else、switch、for、while等)以及函数的使用。这些基础知识是理解和编写C++程序的基础。 2. **类与对象**:C++的...
1. **基础语法**:面试时常会考察Java的基础特性,如数据类型、变量、运算符、流程控制(if/else, switch, for, while等)、方法、类与对象的创建、封装、继承和多态等。 2. **面向对象**:深入理解面向对象的三大...
- 控制结构:如条件语句(if-else)、循环(for, while, do-while)以及switch语句。 - 异常处理:了解如何使用try-catch-finally来捕获和处理异常。 2. **集合框架** - List、Set、Map接口及其实现类的使用,如...
7. **重构条件语句**:将复杂的if-else语句替换为switch语句或者使用策略模式,使代码逻辑更清晰。 8. **函数式编程**:Swift支持很多函数式编程概念,如map、filter和reduce,它们可以使代码更简洁、更具表达性。 ...
1. **C/C++基础**:这是任何C/C++程序员必须掌握的,包括变量、数据类型、运算符、流程控制(if-else, switch-case, for, while)、函数、指针、数组、字符串等。对于指针的理解尤其重要,它是C/C++的灵魂,涉及到...
- **条件语句**:`if`, `else`, `switch`。 - **循环语句**:`for`, `while`, `do...while`。 - **跳转语句**:`break`, `continue`, `goto`(不推荐使用)。 3. **函数** - 函数定义:`返回类型 函数名(参数...
1. **基础语法**:这是初级程序员面试的基础,包括但不限于数据类型、变量、运算符、流程控制(如if-else,switch,for,while等)、方法定义和调用、类与对象、封装、继承和多态。 2. **面向对象编程**:中级...
1. **Java基础**:面试中,面试官可能会考察应聘者的Java基础知识,如变量类型、运算符、流程控制语句(if-else、switch、for、while)、类与对象、封装、继承、多态等。此外,异常处理(try-catch-finally)、接口...
1. **Java语法**:这是学习Java的第一步,包括但不限于变量、数据类型、运算符、控制流语句(如if/else、switch/case、for/while循环等)、数组等基本概念。 2. **面向对象编程(OOP)**:理解类与对象的概念,学会...
2. 控制结构:包括条件语句(if-else)、循环(for、while、do-while)和跳转语句(break、continue),它们是程序逻辑控制的重要工具。 3. 函数与方法:Java中的函数是代码的复用单元,理解如何定义和调用方法是...
1. **基础语法**:Java的基础语法包括变量、数据类型、运算符、流程控制(如if-else,switch,for,while等)、数组和字符串处理。理解这些基本元素是构建任何Java程序的基础。 2. **面向对象编程**:Java是一种...