`
zsk_china
  • 浏览: 25771 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

策略模式结合Map 重构 if else语句

阅读更多
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分支过多的方法

    在软件设计中,面对复杂的业务逻辑,特别是涉及多种条件判断的情况,传统的做法是使用if-else语句或者switch语句来实现。然而,随着需求的不断变化,这种做法可能导致代码结构变得臃肿且难以维护。在这种场景下,...

    如何优雅的替换掉代码中的ifelse

    在编程实践中,遇到需要根据多种条件执行不同操作的情况,我们常常会使用`if-else`语句。然而,当条件分支过多时,`if-else`结构会导致代码变得冗长且难以维护,尤其是在大型项目中,这样的代码往往被称为“烂代码”...

    JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)

    原始的if-else语句如下: ```javascript const onButtonClick = (status) =&gt; { if (status == 1) { sendLog('processing') jumpTo('IndexPage') } else if (status == 2) { sendLog('fail') jumpTo('FailPage...

    Ruby-Ruby技巧惯用Ruby重构和最佳实践

    3. 避免条件表达式:用`case`语句或方法重写复杂的if/else结构,使代码更清晰。 4. 将重复代码提取到单个源:DRY(Don't Repeat Yourself)原则,避免代码重复。 四、代码风格指南 1. 缩进与空格:使用两个空格...

    提升java代码简洁度的几个小技巧

    4. 避免过多的if-else语句:过多的嵌套if-else可能导致代码难以阅读。可以使用switch-case,枚举,或者策略模式来替代。例如,使用`Objects.requireNonNull(obj, "obj must not be null")`代替手动的null检查。 5. ...

    Java规约.docx

    - **if-else结构**:避免深度嵌套,超过3层考虑重构,推荐使用状态设计模式。 - **方法顺序**:类内方法顺序建议为:公有/保护方法&gt;私有方法&gt;getter/setter方法。 - **条件判断**:避免在if条件中执行复杂逻辑,...

    agile java 源代码,包含了agile java这本书里所有示例代码

    1. **Java基础知识**:书中的示例代码涵盖了基本语法,如变量、运算符、控制流(if-else,for,while,switch)、类和对象、封装、继承、多态等。通过这些代码,初学者可以巩固对Java语言的理解,而有经验的开发者则...

    C++程序设计原理与实践

    - **控制结构**:包括if-else语句、switch-case语句以及循环结构(while、for、do-while)等。 **2. 面向对象编程** - **类与对象**:类是对象的抽象描述,包含了数据成员和成员函数;对象则是类的一个实例。 - **...

    高质量C++编程,C++

    1. **C++基础**:书中首先介绍了C++的基础知识,包括变量、数据类型、运算符、流程控制语句(如if-else、switch、for、while等)以及函数的使用。这些基础知识是理解和编写C++程序的基础。 2. **类与对象**:C++的...

    java面试经典150题

    1. **基础语法**:面试时常会考察Java的基础特性,如数据类型、变量、运算符、流程控制(if/else, switch, for, while等)、方法、类与对象的创建、封装、继承和多态等。 2. **面向对象**:深入理解面向对象的三大...

    Java开发手册.zip

    - 控制结构:如条件语句(if-else)、循环(for, while, do-while)以及switch语句。 - 异常处理:了解如何使用try-catch-finally来捕获和处理异常。 2. **集合框架** - List、Set、Map接口及其实现类的使用,如...

    RefactoringProjects

    7. **重构条件语句**:将复杂的if-else语句替换为switch语句或者使用策略模式,使代码逻辑更清晰。 8. **函数式编程**:Swift支持很多函数式编程概念,如map、filter和reduce,它们可以使代码更简洁、更具表达性。 ...

    程序员面试题

    1. **C/C++基础**:这是任何C/C++程序员必须掌握的,包括变量、数据类型、运算符、流程控制(if-else, switch-case, for, while)、函数、指针、数组、字符串等。对于指针的理解尤其重要,它是C/C++的灵魂,涉及到...

    C++入门编程

    - **条件语句**:`if`, `else`, `switch`。 - **循环语句**:`for`, `while`, `do...while`。 - **跳转语句**:`break`, `continue`, `goto`(不推荐使用)。 3. **函数** - 函数定义:`返回类型 函数名(参数...

    java面试集锦

    1. **基础语法**:这是初级程序员面试的基础,包括但不限于数据类型、变量、运算符、流程控制(如if-else,switch,for,while等)、方法定义和调用、类与对象、封装、继承和多态。 2. **面向对象编程**:中级...

    华为面试、笔试题精选

    1. **Java基础**:面试中,面试官可能会考察应聘者的Java基础知识,如变量类型、运算符、流程控制语句(if-else、switch、for、while)、类与对象、封装、继承、多态等。此外,异常处理(try-catch-finally)、接口...

    jav学习路线与必备技能

    1. **Java语法**:这是学习Java的第一步,包括但不限于变量、数据类型、运算符、控制流语句(如if/else、switch/case、for/while循环等)、数组等基本概念。 2. **面向对象编程(OOP)**:理解类与对象的概念,学会...

    java核心技术

    2. 控制结构:包括条件语句(if-else)、循环(for、while、do-while)和跳转语句(break、continue),它们是程序逻辑控制的重要工具。 3. 函数与方法:Java中的函数是代码的复用单元,理解如何定义和调用方法是...

    Java学习面试指南,java核心知识点总结

    1. **基础语法**:Java的基础语法包括变量、数据类型、运算符、流程控制(如if-else,switch,for,while等)、数组和字符串处理。理解这些基本元素是构建任何Java程序的基础。 2. **面向对象编程**:Java是一种...

Global site tag (gtag.js) - Google Analytics