【转载自本科老师上课课件】
在一个软件的功能模块中,需要一种图像处理的功能。该图像处理的策略(如何处理)与图像的内容是相关的。如:卫星的运行图片,使用策略A处理方式,如果是卫星内云图片,则需要策略B处理方式。随时可向系统添加新的处理策略。处理时从GUI菜单下选择一种策略进行处理。 请使用Java设计出相应的程序。
【解决】
方法1:面向过程的传统方式 定义一个大的函数: void strategy(int selection) { if(selection==1){ //按第一种选择的策略进行处理:处理代码 } else if(selection==2){ //按第二种选择的策略进行处理:处理代码 } … else if(selection==n){ //按第n种选择的策略进行处理:处理代码 } } 客户端调用代码: 根据GUI下拉菜单的选择项,调用:strategy(n)方法2:面向对象的传统方式 定义一个类,包含所有的策略: public class Strategy{ public static void strategy1() { //策略1的处理代码 } public static void strategy2() { //策略2的处理代码 } //… public static void strategyn() { //策略n的处理代码 } } 客户端调用代码: 根据GUI下拉菜单的选择项,调用相应的策略代码: Strategy. strategyn()方法3:接口的设计方案 !!! (1)定义一个接口:Strategy public interface Strategy{ public void strategy();//策略处理代码 } (2)随时添加新策略:就是随时实现该接口!(不需要修改已打包封装好的原始的类库包)这是一种纯增量式代码的修改添加 public class NewAddStrategy implement Strategy { public void strategy(){ //新策略的处理代码 } } (3)客户端代码:针对接口进行软件设计 public class Client { Strategy strategy; //调用方式: //strategy. strategy(); } (4)关系图
手机等设备中,对于如蓝牙设备,在整个系统中只需要一个对象表达它。如何控制系统,确保只生成一个对象呢?
【解决】
思路:
1)构造器隐藏起来。即private
2)定义唯一的一个private static 成员保存它。
3)开放一个public static 方法,获取唯一的那个对象。
设计结果----单例模式 !
public class BLDev { private static BLDev obj=new BLDev(); private void BLDev(){ //蓝牙设备初始代代码 } public static BLDev getDefaultBLDev() { return obj; } } //使用方法:在需要BLDev对象的地方: BLDev bl=BLDev.getDefaultBLDev(); 有一个整点报时的服务,每当整点时,向需要整点报时服务的其它对象发出整点通知。整点报时服务在整个系统中只需要一个即可(不允许产生多个)。
【解决】

public class TimeServiceimplements TimeListener{ //… private TimeService(){} private static TimeService ts=new TimeService(); public static TimeService getTimeService() { return ts; }}