码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式一策略模式

时间:2019-08-01 23:57:45      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:contex   使用   ext   lse   个人   准备   abs   else   一个人   

策略模式
  对象具备某个行为,但是在不同的场景中,该行为有不同的实现算法。比如一个人的
  是准备一组算法,并将这组算法封装到一系列的策略类里面,作为一个抽象策略类的子类。

主要解决
在有多种算法相似的情况下,使用 if...else 或 switch...case 所带来的复杂性和臃肿性。

抽象策略(Strategy)类:
定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,
    环境角色使用这个接口调用不同的算法,一般使用接口或抽象类实现。

具体策略(Concrete Strategy)类:
实现了抽象策略定义的接口,提供具体的算法实现。
环境(Context)类:
持有一个策略类的引用,最终给客户端调用。
 1 public class Strategy {
 2     public static void main(String[] args) {
 3         Context context = new Context(new add());
 4         int i = context.toCalculate(1, 2);
 5         System.out.println(i);
 6     }
 7 }
 8 
 9 //抽象策略
10 abstract class calculate {
11     public abstract int toCalculate(int a, int b);
12 }
13 
14 //具体策略
15 class add extends calculate {
16     @Override
17     public int toCalculate(int a, int b) {
18         return a + b;
19     }
20 }
21 
22 class sub extends calculate {
23     @Override
24     public int toCalculate(int a, int b) {
25         return a - b;
26     }
27 }
28 
29 //环境
30 class Context {
31     //封装了策略
32     private calculate cal;
33 
34     public Context(calculate cal) {
35         this.cal = cal;
36     }
37 
38     public int toCalculate(int a, int b) {
39         return cal.toCalculate(a, b);
40     }
41 }

设计模式一策略模式

标签:contex   使用   ext   lse   个人   准备   abs   else   一个人   

原文地址:https://www.cnblogs.com/loveer/p/11286075.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!