[DesignPattern]设计模式:策略(Strategy)
Posted codingeskimo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[DesignPattern]设计模式:策略(Strategy)相关的知识,希望对你有一定的参考价值。
-
策略模式:封装的是做一个事情的具体方法。封装以后可以选择任意的具体的方法。
-
实现:
各种具体方法使用Strategy接口,Context包含了strategy,通过改变它来调用不同的strategy
- 好处:
- 被封装的各种具体方法是一个class,可以被继承,可以根据需要被来控制程序而不改变程序本身的架构
- 具体方法被分别封装,只要使用相同的接口,可以很容易的增加新的方法
- 策略可以再run-time被确定
- 可以省去很多条件的判断
- 具体方法的程序改变不会影响调用这个程序的class
- 坏处:
- 所有的策略都会对外暴露。
- 策略类增多,比较繁复
- 需要保持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)的主要内容,如果未能解决你的问题,请参考以下文章