0 0

现在我有这么一个问题想用策略模式实现,可以吗?3

现在有一个类别的变量叫type,还有一个变量叫状态state,我现在写的程序代码如下
public void oneMethod(int type,String state){
if(type==1){
if(state.equals("启动")){
System.out.print("做类别是1,状态为启动的事儿");
}else if(state.equals("运行")){
System.out.print("做类别是1,状态为运行的事儿");
}
}else if(type==2){
if(state.equals("启动")){
System.out.print("做类别是2,状态为启动的事儿");
}else if(state.equals("运行")){
System.out.print("做类别是2,状态为运行的事儿");
}
}
}
我今天看了看策略模式,能抽象具体类消除if else,但都是单一的if else,没有if里面嵌套另外一个if,所

以我想问一下怎么设计能解决这种嵌套if
2012年5月15日 16:33

3个答案 按时间排序 按投票排序

0 0

hello...我个人认为。你目前的这种情况,桥接模式更适合。

2012年8月22日 10:46
0 0

我个人觉得你这个不必使用策略模式,用了反倒显得罗嗦了。策略强调多态,以同一接口不同实现类的方式抽象不同的方法逻辑。但如果就一个方法,只是传参不同而增加的判断用这个觉得没什么必要。下面附一个策略模式的代码,希望对你有帮助

//StrategyExample test application
 
class StrategyExample {
 
    public static void main(String[] args) {
 
        Context context;
 
        // Three contexts following different strategies
        context = new Context(new FirstStrategy());
        context.execute();
 
        context = new Context(new SecondStrategy());
        context.execute();
 
        context = new Context(new ThirdStrategy());
        context.execute();
 
    }
 
}
 
// The classes that implement a concrete strategy should implement this
 
// The context class uses this to call the concrete strategy
interface Strategy {
 
    void execute();
 
}
 
// Implements the algorithm using the strategy interface
class FirstStrategy implements Strategy {
 
    public void execute() {
        System.out.println("Called FirstStrategy.execute()");
    }
 
}
 
class SecondStrategy implements Strategy {
 
    public void execute() {
        System.out.println("Called SecondStrategy.execute()");
    }
 
}
 
class ThirdStrategy implements Strategy {
 
    public void execute() {
        System.out.println("Called ThirdStrategy.execute()");
    }
 
}
 
// Configured with a ConcreteStrategy object and maintains a reference to a Strategy object
class Context {
 
    Strategy strategy;
 
    // Constructor
    public Context(Strategy strategy) {
        this.strategy = strategy;
    }
 
    public void execute() {
        this.strategy.execute();
    }
 
}

2012年6月01日 10:14
0 0

新建一个接口.

public interface StateStrategy {
  public void execute();
}


写一个实现类

public class DefaultStateStrategy implements StateStrategy {
  
  public void execute() {
    //实现你的逻辑
  }
}


最后你的oneMethod改为

public void oneMethod(StateStrategy strategy);

这样你的oneMethod可以不去使用if else.

2012年5月25日 12:07

相关推荐

    java设计模式

    32.1.1 策略模式实现压缩算法 32.1.2 命令模式实现压缩算法 32.1.3 小结 32.2 策略模式VS状态模式 32.2.1 策略模式实现人生 32.2.2 状态模式实现人生 32.2.3 小结 32.3 观察者模式VS责任链模式 32.3.1 责任链模式...

    C#23种设计模式_示例源代码及PDF

    桥梁模式:将抽象化与实现化脱耦,使得二者可以独立的变化,也就是说将他们之间的强关 桥梁模式 联变成弱关联,也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是 继承关系,从而使两者可以独立的...

    我有外卖研究简报.pdf

    综上所述,“我有外卖”通过创新的硬件+软件模式,试图打造一个高效、便捷的外卖生态系统。其模式的优势在于提高用户体验和商家服务质量,但同时也面临着高昂的硬件成本和市场竞争的压力。随着O2O业务的不断发展,...

    java二十三种设计模式

    19. 策略模式(Strategy):定义一系列的算法,把它们一个个封装起来,并使它们可相互替换。 20. 模板方法模式(Template Method):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 21. 访问者模式...

    我有故事,讲给你听 内容型产品的内容分发模式探索.pdf

    内容型产品,如LOFTER,面临着一个核心挑战:如何有效地分发站内丰富的原创内容,使其超越用户原有的社交圈,触及更广泛的受众。为了寻找解决方案,交互设计师采用桌面研究、竞品分析和用户调研的方法,对微博、B站...

    购物-我有外卖 v2.6.2.zip

    《购物-我有外卖 v2.6.2.zip》是一个包含安卓应用的压缩包,主要服务于教育教学领域。这个版本号为v2.6.2的更新可能包含了对原有功能的优化、新功能的添加或者系统稳定性提升。在教育场景中,这种应用可能被用于模拟...

    01-02-07-各设计模式总结与对比1

    例如,单例模式确保一个类只有一个实例,常用于配置管理或缓存服务;而工厂模式则提供了创建对象的接口,但具体的实现延迟到了子类。 结构型设计模式如适配器、桥接、组合、装饰器、门面、享元和代理模式,则关注...

    2021策略词汇大全 互联网黑话

    《2021策略词汇大全》是一份集结了互联网行业及营销领域内广泛使用的专业术语和概念的资料。它不仅为市场营销人员提供了丰富的话术资源,也帮助理解这些词汇背后的战略含义和应用场景。以下是对文档中提及的部分词汇...

    基础信息模块设计模式报告05051

    在基础信息模块的设计中,我们参考并应用了一些常见的设计模式,如工厂模式用于创建对象,观察者模式用于实现事件驱动,单例模式确保系统中只有一个实例等。这些模式能够提高代码的复用性、可维护性和可扩展性。 2....

    如何做好销售工作.pptx

    马斯洛需求理论认为,人的需求可以分为五个层次:生理需求、安全需求、社交需求、尊重需求和自我实现需求。销售工作中,我们需要了解客户的需求,从而提供相应的产品和服务,满足客户的需求。 销售技巧 销售技巧...

    市场竞争策略培训教材.pptx

    市场竞争策略是企业在面对众多竞争对手时,为了获得竞争优势和市场份额而制定的一系列行动计划。这份培训教材主要涵盖了解析竞争者、企业竞争战略的选择以及市场战略的三个核心方面:成本领先战略、差异化战略和集中...

    2020ZTE 傅里叶派题 参考答案.

    在给定的资源中,我们关注的是一个与ZTE相关的傅里叶问题的解决方案,它涉及到C++编程、数据结构优化、搜索算法以及剪枝技术。以下是对这些知识点的详细阐述: 1. **C++**: C++是一种强大的、面向对象的编程语言,...

    创新思维沙盘狩猎者.ppt

    在这个环境中,即使企业实现了"人无我有,人有我优"的竞争优势,如果不能持续创新,也可能被新的竞争者颠覆。互联网金融就是一个典型的例子,尽管它是新兴行业,但如果不寻求创新,也将面临在红海中挣扎的命运。 在...

    营销新思路——“走光营销” 管理资料.doc

    关键在于找到一个与产品特性紧密相关的消费需求点,并确保它是唯一且与众不同的。 其次,创造一个亮点是"走光营销"的核心。这个亮点就是产品的差异化卖点,它可以是产品的某个独特功能,或者是品牌的故事元素。这个...

    JAVA面试题目 JAVA面试题目一览表

    例如,使用Singleton模式可以确保类只有一个实例,减少资源消耗;而Observer模式则允许在解耦的情况下高效处理事件。” 这些是JAVA面试中可能会遇到的一些问题及其建议的回答。准备这些常见问题可以帮助求职者在...

    云原生时代的应用模型与下一代 DevOps技术.pptx

    这种“以应用为中心”的DevOps模式推动了基础设施从“我有什么,你就用什么”向“我要什么,你就给什么”的转变。 总结来说,云原生时代的DevOps面临复杂性和规模化的问题,而OAM应用模型通过组件和特征的分离,...

    迎接半导体新挑战 我有我方式——访富士通集团全球高级副总裁、电子元器件事业部总裁藤井滋先生.pdf

    【半导体技术的发展与挑战】 半导体技术自诞生以来,历经多次革命性的创新,为人类社会带来了巨大的变革。网络的兴起和普及极大地推动了...富士通的案例为我们提供了一个观察和理解半导体产业如何应对挑战的视角。

Global site tag (gtag.js) - Google Analytics