策略模式:

--如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3884781.html "谢谢--

为什么使用:
策略模式主要用于有很多不同的方式来解决同一个问题的情景。
如:文件的保存:可保存成txt,也可保存成xml。
另外压缩文件、商场的促销策略等是类似的

如何使用:
需要定义一个接口或者抽象类来表示各种策略的抽象,
由于在选择适当的策略上有些不方便,需要不断地判断需要的类型,
因此需要用简单工厂方法来实现判断过程

例子:
用策略模式实现图片格式的存储
1.建立一个公共接口用来保存图片格式

public interface ImagineSave {
/**
* 图片存储格式
*/
  public void save();
}

2.根据图片现有格式分别建立每一种格式的接口实现类

/**
* 策略类一:图片格式GIF
*
* @author XIEHEJUN
*
*/
public class GIFSave implements ImagineSave {

@Override
public void save() {
  System.out.println("存储格式为GIF");
}

}

/**
* 策略类二:图片格式JPEG
*
* @author XIEHEJUN
*
*/
public class JPEGSave implements ImagineSave {

@Override
public void save() {
  System.out.println("将图片保存为JPEG格式。");

}

}

/**
* 策略类三:图片格式PEN
*
* @author XIEHEJUN
*
*/
public class PENSave implements ImagineSave{

@Override
public void save() {
  System.out.println("将图片保存为PEN格式。");
  }

}

3.建立一个简单工厂类,实现格式判断过程

/**
* 建立简单工厂类
*
* @author XIEHEJUN
*
*/
public class TypeFactotry {
  public static ImagineSave getSaver(String type) {
    if (type.equalsIgnoreCase("GIF")) {
      return new GIFSave();
    } else if (type.equalsIgnoreCase("JPEG")) {
      return new JPEGSave();
    } else if (type.equalsIgnoreCase("PEN")) {
      return new PENSave();
    } else {
      return null;
    }

  }
}

4.main函数

public static void main(String[] args) {
  // TODO Auto-generated method stub
  ImagineSave save = TypeFactotry.getSaver("JPEG");
  save.save();
  save = TypeFactotry.getSaver("GIF");
  save.save();
  save = TypeFactotry.getSaver("PEN");
  save.save();
  save = TypeFactotry.getSaver("GIF");
  save.save();
}

java笔记--策略模式和简单工厂模式的更多相关文章

  1. Java设计模式(一) 简单工厂模式不简单

    摘要:本文介绍了简单工厂模式的概念,优缺点,实现方式,以及结合Annotation和反射的改良方案(让简单工厂模式不简单).同时介绍了简单工厂模式(未)遵循的OOP原则.最后给出了简单工厂模式在JDB ...

  2. Java设计模式之(工厂模式)--简单工厂模式--工厂方法模式--抽象工厂模式

    工厂模式: 工厂模式可以分为三类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory) 简单工厂模 ...

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

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

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

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

  5. Java设计模式:Simple Factory(简单工厂)模式

    概念定义 简单工厂(Simple Factory)模式,又称静态工厂方法(Static Factory Method)模式,即定义一个工厂类,根据传入的不同参数创建不同的产品实例,这些实例对象具有共同 ...

  6. 设计模式(Java版)-创建型模式之简单工厂模式

    前言:这段时间在学习设计模式,本人也是小菜一枚(所以写的如果有错误的地方请大大们给予指出).这个东西也是我一直想学习的,从点点滴滴做起,记录下自己每天的领悟! 一.工厂模式的动机 在软件系统中,经常面 ...

  7. Java设计模式(三)简单工厂模式

    定义与类型 定义:由一个工厂对象决定创建出哪一种产品类的实例 类型:创建型,但不属于GOF23种设计模式 适用场景 工厂类负责创建的对象比较少 客户端(应用层)只知道传入工厂类的参数,对于如何创建对象 ...

  8. Java设计模式(1)——创建型模式之简单工厂模式(Simple Factory)

    设计模式系列参考: http://www.cnblogs.com/Coda/p/4279688.html 一.概述 工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高 ...

  9. Java描述设计模式(02):简单工厂模式

    本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景简介 1.引入场景 订餐流程简单描述 1).食品抽象类,规定食品的基础属性操作 2).鱼类,鸡肉类食品类扩展 3).订餐流程类,根 ...

  10. 工厂模式之简单工厂模式,head first设计模式

    简单设计模式比较简单,15分钟的时间,跟着我做,十几分钟学会简单设计模式,开始吧: 1.使用new实例化一个对象时,你肯定知道这种代码缺少弹性,绑定着具体的类会导致代码更加脆弱,简单工厂模式就是针对接 ...

随机推荐

  1. 移动APP为什么要开发两套Android和IOS-桥接模式

    一.前言 现在用H5开发个 web app 多么方便,兼容两大系统Andriod和IOS.但是为什么许多公司还要开发原生的APP?开发原生的APP就需要开发两套一套运行在Andriod系统的,一套运行 ...

  2. 你所不知道的Python奇技淫巧

    有时候你会看到很Cool的Python代码,你惊讶于它的简洁,它的优雅,你不由自主地赞叹:竟然还能这样写.其实,这些优雅的代码都要归功于Python的特性,只要你能掌握这些Pythonic的技巧,你一 ...

  3. 第三十九课:requestAnimationFrame详解

    大家应该都知道,如果一个页面运行的定时器很多,无论你怎么优化,最后肯定会超过指定时间才能完成动画.定时器越多,延时越严重. 为此,YUI,kissy等采用中央队列的方式,将定时器减少至一个.浏览器厂商 ...

  4. setter方法的内存错误

    - (void)setList:(ClassicList *)list { self.list = list; _titleLabel.text = list.activityName; _addre ...

  5. Oracle中新增表代码

    create table userinfo ( id varchar2(36) primary key, username varchar2(50) not null, password varcha ...

  6. java.lang.NoSuchFieldError: deferredExpression

    处理:遇到这个异常的时候是用jstl标签,是版本问题,由于MyEclipse添加Java EE5,其中自动包括了jstl1.2的版本,lib中又存在一个jstl1.1.2的jar包,把旧版本的删掉就可 ...

  7. Photoshop之渐变工具使用

    最上面两个游标控制不透明度 下面两个控制渐变位置 点击游标可以设置颜色 基于每个游标进行操作

  8. Handlebars的使用方法文档整理(Handlebars.js)

    Handlebars是一款很高效的模版引擎,提供语意化的模版语句,最大的兼容Mustache模版引擎, 提供最大的Mustache模版引擎兼容, 无需学习新语法即可使用; Handlebars.js和 ...

  9. RHCS配置web高可用集群

    基本条件三台主机 10.37.129.5 web1.xzdz.hk web1 10.37.129.6 web2.xzdz.hk web2 10.37.129.4 luci.xzdz.hk luci 其 ...

  10. ORACLE数据库删除表中记录报record is locked by another user

    在操作ORACLE数据库的时候,由于执行完,没有COMMIT,直接把PL/SQL关闭掉,后来导致那张表被锁住,当编辑时就会出现这个信息,record is locked by another user ...