设计模式之JAVA

Strategy

2020-09-08  本文已影响0人  93张先生

策略模式

针对同一任务有多个不同的实现,在运行时,选择一种特定的算法实现。

特征

UML

image.png

定义

在策略模式中,我们创建一个有抽象的算法的接口,然后创建这个抽象算法的具体实现,这个叫做策略。
客户端总是调用抽象方法,然后传递给要给上下文对象,这个上下文对象决定使用哪个算法。

场景

我们来设计一个社交应用,它会允许我连接在4个社交平台上的我的朋友们,比如: Facebook、Google Plus、Twitter 、Orkut。现在我想这个 client 能够应该能够告诉我,朋友的名字和所需要的平台。

总的说来,我有一个操作,这个操作可以有多种方式实现(连接我的朋友),在运行时,用户可以选择一个期望的方式。

类图

image.png
ISocialMediaStrategy
public interface ISocialMediaStrategy {
    public void connectTo(String friendName);
}
SocialMediaContext
public class SocialMediaContext {
    ISocialMediaStrategy smStrategy;
 
    public void setSocialmediaStrategy(ISocialMediaStrategy smStrategy) 
    {
        this.smStrategy = smStrategy;
    }
 
    public void connect(String name) 
    {
        smStrategy.connectTo(name);
    }
}
FacebookStrategy
public class FacebookStrategy implements ISocialMediaStrategy {
 
    public void connectTo(String friendName) 
    {
        System.out.println("Connecting with " + friendName + " through Facebook");
    }
}
GooglePlusStrategy
public class GooglePlusStrategy implements ISocialMediaStrategy {
 
    public void connectTo(String friendName) 
    {
        System.out.println("Connecting with " + friendName + " through GooglePlus");
    }
}
TwitterStrategy
public class TwitterStrategy implements ISocialMediaStrategy {
 
    public void connectTo(String friendName) 
    {
        System.out.println("Connecting with " + friendName + " through Twitter");
    }
}
OrkutStrategy
public class OrkutStrategy implements ISocialMediaStrategy {
 
    public void connectTo(String friendName) 
    {
        System.out.println("Connecting with " + friendName + " through Orkut [not possible though :)]");
    }
}

Client
public class Demo {
    public static void main(String[] args) {
 
        // Creating social Media Connect Object for connecting with friend by
        // any social media strategy.
        SocialMediaContext context = new SocialMediaContext();
 
        // Setting Facebook strategy.
        context.setSocialmediaStrategy(new FacebookStrategy());
        context.connect("Lokesh");
 
        System.out.println("====================");
 
        // Setting Twitter strategy.
        context.setSocialmediaStrategy(new TwitterStrategy());
        context.connect("Lokesh");
 
        System.out.println("====================");
 
        // Setting GooglePlus strategy.
        context.setSocialmediaStrategy(new GooglePlusStrategy());
        context.connect("Lokesh");
 
        System.out.println("====================");
 
        // Setting Orkut strategy.
        context.setSocialmediaStrategy(new OrkutStrategy());
        context.connect("Lokesh");
    }
}

流行的实现

上一篇 下一篇

猜你喜欢

热点阅读