在使用图像处理软件处理图片后,需要选择一种格式进行保存。然而各种格式在底层实现的算法并不相同,这刚好适合策略模式。编写程序,演示如何使用策略模式与简单工厂模式组合进行开发。

思路如下:

  1. 使用interface来定义一个接口,在该接口中定义save()方法;
  2. 根据图片格式定义不同的类,分别在这些类中使用关键字implements实现接口;
  3. 创建一个实现选择的类,在该类中定义实现选择的方法,该方法返回值为对应的图片保存类;
  4. 在主方法中实现接口。

代码如下:

public interface ImageSaver {
void save();//定义save()方法
} public class GIFSaver implements ImageSaver {
@Override
public void save() {//实现save()方法
System.out.println("将图片保存成GIF格式");
}
} public class JPEGSaver implements ImageSaver { @Override
public void save() {
System.out.println("将图片保存成JPG格式");
}
} public class PNGSaver implements ImageSaver { @Override
public void save() {
System.out.println("将图片保存成PNG格式");
} } public class TypeChooser {
public static ImageSaver getSaver(String type) {
if (type.equalsIgnoreCase("GIF")) {//使用if else语句来判断图片的类型
return new GIFSaver();
} else if (type.equalsIgnoreCase("JPEG")) {
return new JPEGSaver();
} else if (type.equalsIgnoreCase("PNG")) {
return new PNGSaver();
} else {
return null;
}
}
} public class User {
public static void main(String[] args) {
System.out.print("用户选择了GIF格式:");
ImageSaver saver = TypeChooser.getSaver("GIF");//获得保存图片为GIF类型的对象
saver.save();
System.out.print("用户选择了JPEG格式:");//获得保存图片为JPEG类型的对象
saver = TypeChooser.getSaver("JPEG");
saver.save();
System.out.print("用户选择了PNG格式:");//获得保存图片为PNG类型的对象
saver = TypeChooser.getSaver("PNG");
saver.save();
}
}

效果如图:

Java实现策略模式的简单应用的更多相关文章

  1. java笔记--策略模式和简单工厂模式

    策略模式: --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3884781.html "谢谢-- 为什么使用:策略模式主要用于 ...

  2. C++设计模式 ==> 策略模式与简单工厂模式结合

    简介 策略模式相较之于简单工厂模式适用于生产方法经常变化且方法较为繁多的情况,因为生产方法时常变化就会需要频繁修改工厂类,违背了开闭原则,这时就可以用策略选择类由客户端根据需求动态切换策略.且策略模式 ...

  3. 设计模式之策略模式&简单工厂模式

    学习设计模式已经有非常长一段时间了,事实上先前已经敲过一遍了.可是老认为没有学到什么,认识也不够深刻.如今趁着重构机房,再又一次来过,也不晚. 事实上在敲了机房之后,看看模式,事实上,曾经非常难理解. ...

  4. Java 关于策略模式+简单工厂模式下的思考

    导读 最近在做公司一个消息网关的服务,包括:短信.微信.邮件等,所有请求通过一个入口,方便接口的管理(记录日志.接口限流白名单啥的).如何写这个接口呢,还有为了以后扩展,对接过短信.微信.公众号的童鞋 ...

  5. java设计模式 策略模式Strategy

    本章讲述java设计模式中,策略模式相关的知识点. 1.策略模式定义 策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户.策略模式属于对象的 ...

  6. 我的Java设计模式-策略模式

    今天给大家说说田忌赛马的故事.如有雷同,纯属巧合!话说在战国时期,群雄割据,硝烟四起,茶余饭后还是少不了娱乐活动的,其中赛马是最火爆的.一天,孙膑看到田忌像个死鸡似的就知道肯定赛马又输给了齐威王,立马 ...

  7. Java设计模式—策略模式

    1.策略模式(Strategy Pattern)是一种比较简单的模式,也叫做政策模式(PolicyPattern). 定义如下:     Define a family of algorithms,e ...

  8. Java 设计模式--策略模式,枚举+工厂方法实现

    如果项目中的一个页面跳转功能存在10个以上的if else判断,想要做一下整改 一.什么是策略模式 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理,最终可以实现解决 ...

  9. java设计模式--策略模式

    策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 本文地址:http:// ...

随机推荐

  1. 实战c++中的string系列--string与char*、const char *的转换(data() or c_str())

    在project中,我们也有非常多时候用到string与char*之间的转换,这里有个一我们之前提到的函数 c_str(),看看这个原型: const char *c_str(); c_str()函数 ...

  2. eclipse配置google代码风格

    1.下载google code style的xml文件 地址:https://github.com/google/styleguide 导入xml文件 可能会遇到警告: 版本的问题,忽略即可. < ...

  3. node学习笔记4——get数据传递

    nodejs中,关于将接收到的数据处理为json格式用到的是 url 模块. 主要用到是下面3个东东: url.parse   url.pathname url.query 我们看一个简单的例子: 先 ...

  4. 浅谈跨域以WebService对跨域的支持

    跨域问题来源于JavaScript的同源策略,即只有 协议+主机名+端口号 (如存在)相同,则允许相互访问.也就是说JavaScript只能访问和操作自己域下的资源,不能访问和操作其他域下的资源. 在 ...

  5. 让QtCreator在调试时显示字符串 Qt调试助手 QtDebuggingHelper qtc-debugging-helper

    When starting gdb with application message “Debugging Helper Missing” is displayed [Solved] http://q ...

  6. 《FPGA全程进阶---实战演练》第十四章 蜂鸣器操作

    1 基础理论部分 本实验主要是实现蜂鸣器的操作,蜂鸣器的操作是非常简单的,只有把简单的事情做好,方可谈其他复杂的事.本实验部分会利用verilog一些宏定义语句,其实在VGA实验部分已经出现过,这里为 ...

  7. linux常用的搜索命令

    搜索包含123内容的文件夹grep "123" ./ -r -n 按照名字查找find ./ -name “xxxx” find ./ -name "123.txt&qu ...

  8. c算法

    斐波那契 void main() { ]={, }, i; ;i<=;i++) //这里需要注意,for循环虽然<=9, 还有个i++ { a[i] = a[i-] + a[i-]; pr ...

  9. 最近迷上了GUI

    package windows; import java.awt.BorderLayout; import javax.swing.ButtonGroup; import javax.swing.JB ...

  10. jpa无外键配置

    在用jpa这种orm框架时,有时我们实体对象存在关联关系,但实际的业务场景可能不需要用jpa来控制数据库创建数据表之间的关联约束,这时我们就需要消除掉数据库表与表之间的外键关联.但jpa在处理建立外键 ...