java设计模式之策略模式,java 状态模式和策略模式
目录
定义使用场景案例需求实现方案方案分析总结
定义
策略模式定义了一系列算法,并且将每个算法封装起来,使得他们可以相互替换,而且算法的变化不会影响使用算法的客户端。
使用场景
一个系统需要动态的在几种算法中选择一种,可以把每个算法封装到具体的策略类中一个类中定义了多种行为,可以去代替条件转移语句,减少硬编码系统中各个算法或者说函数是彼此独立的,而且要求对客户隐藏算法具体实现细节的时候多个类只区别在表现行为的不同,可以使用策略模式,在运行时动态的选择要执行的行为
案例
需求
根据不同的水果口味,制作不同的蛋糕,比如现在有苹果味和香蕉味的蛋糕,入参为苹果味,则制作苹果味蛋糕;入参为香蕉味,则制作香蕉味的蛋糕
实现方案
定义制作蛋糕的抽象类
/** * 蛋糕制作抽象类* @ author : liya Jie * @创建时间:2022/2/24 10:53 * @ version :1.0 */公共抽象类CakeHandler { /** *制作蛋糕* @author:李亚洁* @ date : 2022/2/24 10:54 * @ param * @ return void * @ exception : * @ update : * @ update person : * */public抽象void make cake();}定义制作苹果味蛋糕的策略类,继承制作蛋糕抽象类,重写做蛋糕方法
/** * 制作苹果蛋糕策略* @ author : liya Jie * @创建时间:2022/2/24 10:55 * @版本:1.0 */public类AppleCakeHandler扩展蛋糕处理程序{ @ Override public void make cake(){ system。出去。println(正在制作苹果蛋糕);}}定义制作香蕉味蛋糕的策略类,继承制作蛋糕抽象类,重写做蛋糕方法
/** * 制作香蕉蛋糕策略* @ author : liya Jie * @创建时间:2022/2/24 10:55 * @ version :1.0 */公共类BananaCakeHandler扩展蛋糕处理程序{ @ Override public void make cake(){ system。出去。println(正在制作香蕉蛋糕);}}定义枚举类,来制作蛋糕的策略
/** * 制作蛋糕枚举* @ author : liya Jie * @创建时间:2022/2/24 10:57 * @ version :1.0 */public enum cake enum { APPLE(APPLE cakehandler。班级。get simplename()、new AppleCakeHandler()、BANANA(BananaCakeHandler。班级。get simplename());私有最终字符串cakeTypeprivate最终蛋糕处理器;CakeEnum(字符串cakeType,cake handler cake handler){ this。蛋糕类型=蛋糕类型;这个。蛋糕处理器=蛋糕处理器;} //匹配策略类公共静态蛋糕枚举匹配(字符串蛋糕类型){蛋糕枚举[]值=蛋糕枚举。values();对于(CakeEnum cakeEnum :值){ if(caketype。等于(CakeEnum。caketype)){ return CakeEnum;} }返回null}公共字符串get cakeType(){ return cakeType;} public CakeHandler getCakeHandler(){ return CakeHandler;}}定义测试类
/** * 测试类* @ author : liya Jie * @ create time :2022/2/24 11:07 * @ version :1.0 */public class Test { public static void main(String[]args){ String cakeType=apple cakehandler。班级。get simplename();蛋糕数量。火柴(蛋糕型);蛋糕处理器蛋糕处理器=蛋糕枚举。getcakehandler();蛋糕搬运工。做蛋糕();cakeType=bananacakehandler。班级。get simplename();蛋糕枚举=蛋糕枚举。火柴(蛋糕型);蛋糕处理器=蛋糕枚举。getcakehandler();蛋糕搬运工。做蛋糕();}}查看测试结果
00-1010通过本案例的实现,我们可以看到if - else的硬代码被策略模式的枚举所取代,不同的策略被封装到单独的实现类中,避免了一个策略的问题影响到其他策略,提高了系统的可扩展性,最大程度的实现了开放封闭原则。
方案分析
优势
多条件语句是硬编码的,很难维护,使用策略模式可以避免使用多条件语句。策略模式提供了一系列的算法,算法家族中的通用代码可以通过适当使用继承或实现来引用父类。这样,可以避免重复的代码策略模式,并且可以提供相同行为的不同实现。客户端可以根据具体的业务逻辑选择合适的策略模式,这完全符合开放封闭原则。它可以在不修改或稍微修改源代码的情况下,灵活地增加、减少和修改新的算法策略模式,将算法的使用放在环境类中,而算法的实现在具体的策略类中,实现了两个劣势.的分离
当实际业务逻辑非常复杂时,就会导致很多策略客户端。他们只有在合适的时间使用合适的算法类,才能合理的完成业务逻辑。这篇关于Java使用策略模式实现条件判断,告别if else的文章就在这里。有关Java策略模式的更多信息,请搜索Popular IT以前的文章或继续浏览下面的相关文章。我希望你以后能更多地支持流行音乐!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。