静态工厂与策略模式的比较
来源:互联网 发布:视频录制软件哪个好 编辑:程序博客网 时间:2024/06/04 18:43
静态工厂模式与策略模式的比较
静态工厂模式:一般采用if…else语句或switch语句通过条件判断,并返回结果。这样写起来是比较方便的,适用于不复杂的类,但是该模式耦合程度比较高。
策略模式:通过由实现类实现行为接口,在操作类中切换不同实现类的行为。这样写起来比较解耦,但是会导致类增多。适用于行为比较复杂的类。
接下来看下实例代码:
静态工厂模式:
public class DateUtils { public enum Mode { MODE1, MODE2, MODE3, MODE4, MODE5 } public static String getDataFormat(Mode m, @NonNull Date d) { String date = ""; switch (m) { case MODE1: date = mode1(d); break; case MODE2: date = mode2(d); break; case MODE3: date = mode3(d); break; case MODE4: date = mode4(d); break; case MODE5: default: SimpleDateFormat format = new SimpleDateFormat(); date = format.format(d); break; } return date; } private static String mode1(@NonNull Date d) { SimpleDateFormat format = new SimpleDateFormat("yyyy:MM:dd HH:mm:SS"); return format.format(d); } private static String mode2(@NonNull Date d) { SimpleDateFormat format = new SimpleDateFormat("yyyy:MM:dd HH:mm"); return format.format(d); } private static String mode3(@NonNull Date d) { SimpleDateFormat format = new SimpleDateFormat("yyyy:MM:dd"); return format.format(d); } private static String mode4(@NonNull Date d) { Calendar calendar = Calendar.getInstance(); calendar.setTime(d); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH) + 1; int day = calendar.get(Calendar.DAY_OF_MONTH); return year + "/" + month + "/" + day; }}
程序入口:
Log.e("zhang", "onCreate--> " + DateUtils.getDataFormat(DateUtils.Mode.MODE3, new Date()));Log.e("zhang", "onCreate--> " + DateUtils.getDataFormat(DateUtils.Mode.MODE4, new Date()));
策略模式
行为的接口:
public interface Format { String date(Date date);}
行为的实现类(这里采用比较简单的实现):
public class DateFormat implements Format { @Override public String date(@NonNull Date d) { SimpleDateFormat format = new SimpleDateFormat("yyyy:MM:dd"); return format.format(d); }}public class TimeFormat implements Format { @Override public String date(@NonNull Date d) { Calendar calendar = Calendar.getInstance(); calendar.setTime(d); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH) + 1; int day = calendar.get(Calendar.DAY_OF_MONTH); return year + "/" + month + "/" + day; }}
行为的管理类(控制类):
public class DateManager { private Format state; public void setState(Format state) { this.state = state; } public String date(@NonNull Date date){ return state.date(date); }}
程序入口:
DateManager d = new DateManager(); d.setState(new DateFormat()); String date = d.date(new Date()); Log.e("zhang", "onCreate--> date===" + date); d.setState(new TimeFormat()); date = d.date(new Date()); Log.e("zhang", "onCreate--> date===" + date);
上述例子可以对比看出,如果方法的实现不是很复杂,使用静态工厂模式实现是比较方便的,只需要一个类就搞定。如果方法的实现非常复杂,超过几百行代码,那么就需要考虑策略模式了。
0 0
- 静态工厂与策略模式的比较
- 策略模式与工厂模式比较
- 策略模式与工厂模式比较
- 策略模式与工厂模式比较
- 策略模式与工厂模式比较
- 策略模式与工厂模式比较
- 策略模式与工厂模式比较
- 策略模式与工厂模式比较
- 策略模式与工厂模式的区别
- 策略模式与工厂模式的区分
- 工厂模式与抽象工厂的比较
- 策略模式:策略模式与简单工厂模式的异同
- 简单工厂与策略模式的区别
- 简单工厂与策略模式的结合
- 简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别
- 简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别
- 简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别
- 简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别
- Java中(静态)变量、(静态)代码块的执行顺序
- string.Format对C#字符串格式化
- CSS 强制不换行,文字溢出显示省略号~
- 机器学习——决策树算法原理及案例
- Lucene 第一次建索引报错
- 静态工厂与策略模式的比较
- Bug
- ifconfig中lo、eth0、br0、wlan0接口
- Oracle中Merge into用法总结
- 递归算法的时间复杂度终结篇
- Java读取Excel
- Oracle建立表空间和用户
- CAP理论
- git hub的git pull和git pash 失败针对我们新手的解决方法