import java.util.Scanner;

/*策略模式
 * 可以动态的改变对象的行为,可以使程序有多种实现方式
 * 策略模式中有三个对象:
 *     环境对象:该类实现类对抽象策略中定义的接口或抽象类的引用
 *     抽象策略对象:可由接口或抽象类来实现
 *     具体策略对象:封装了实现不同功能的不同算法
 *  使用不同的算法来实现应用程序的功能,具体的选择可以有环境对象来完成,可以避免使用条件语句造成混乱
 */
interface Save
{
    void save();
}
 class GIFSave implements Save
{
     @Override
public  void  save()
     {
    System.out.println("将图片储存成GIF模式");
     }
}
 class JPEGSave implements Save
 {
     public void save()
     {
         System.out.println("将图片储存成JPEG模式");
     }
 }
 
 class ChooseType
{
     private Save save;
     public ChooseType(Save save)
     {
         this.save=save;
     }
    public static Save getSave(String type)
    {
        if(type.equalsIgnoreCase("JPEG"))
        { return new JPEGSave();}
        else if(type.equalsIgnoreCase("GIF"))
         {     return new GIFSave();}
         else return null;
    }
    }


public class ImageSaver
{
    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入想要转化的格式");
        String type = scan.next();
        //Object Save;
        
         Save jpeg = ChooseType.getSave(type);
        jpeg.save();
        System.out.println("储存完毕");
            
    }
}

策略模式有效的解决了客户端的多重选择问题,避免了多重if~else带来的混乱,使得代码更加有序