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

[DesignPattern]设计模式:策略(Strategy)

时间:2020-06-06 01:20:14      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:dia   system   coding   pattern   odi   contex   demo   nta   方法   

  • 策略模式:封装的是做一个事情的具体方法。封装以后可以选择任意的具体的方法。

  • 实现:
    技术图片

各种具体方法使用Strategy接口,Context包含了strategy,通过改变它来调用不同的strategy

  • 好处:
  1. 被封装的各种具体方法是一个class,可以被继承,可以根据需要被来控制程序而不改变程序本身的架构
  2. 具体方法被分别封装,只要使用相同的接口,可以很容易的增加新的方法
  3. 策略可以再run-time被确定
  4. 可以省去很多条件的判断
  5. 具体方法的程序改变不会影响调用这个程序的class
  • 坏处:
  1. 所有的策略都会对外暴露。
  2. 策略类增多,比较繁复
  3. 需要保持contaxt和strategy两个class在一起。
  • 具体实现
    技术图片

接口

public interface IMedia {
    public void connect(String name);
}

各种策略

public class WeChatMedia implements IMedia {
    @Override
    public void connect(String name) {
        System.out.println("connecting " + name + " with WeChat");
    }
}
public class AlibabaMedia implements IMedia {
    @Override
    public void connect(String name) {
        System.out.println("Connecting " + name + " with Alibaba");
    }
}
public class QQMedia implements IMedia {
    @Override
    public void connect(String name) {
        System.out.println("Connecting " + name + " with QQ");
    }
}

Context class

public class MediaImp {
    private IMedia iMedia;
    public void setiMedia(IMedia iMedia){
        this.iMedia = iMedia;
    }
    public void connect(String name) {
        iMedia.connect(name);
    }
}

测试:

public class Demo {
    public static void main(String[] args) {
        MediaImp media = new MediaImp();

        media.setiMedia(new WeChatMedia());
        media.connect("codingEskimo");

        media.setiMedia(new QQMedia());
        media.connect("codingEskimo");

        media.setiMedia(new AlibabaMedia());
        media.connect("codingEskimo");
    }
}

结果

connecting codingEskimo with WeChat
Connecting codingEskimo with QQ
Connecting codingEskimo with Alibaba

[DesignPattern]设计模式:策略(Strategy)

标签:dia   system   coding   pattern   odi   contex   demo   nta   方法   

原文地址:https://www.cnblogs.com/codingEskimo/p/13052906.html

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