java设计模式与应用案例 pdf_java设计模式和应用场景.pdf

Java常见设计模式应用场景

1、抽象工厂

应用场景:封装变化点。创建一系列相互依赖的对象。

在软件系统中,经常面临着 “一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在更多系

列对象的创建工作。如何应对这各变化如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免

客户程序和这种 “多系列具体对象创建工作”的紧耦合。

public abstract Class AbstractFactory{

//创建一系列相互关联的对象如游戏场景中相互关联的Road,Building,Tunnel,Jungle对象

public abstract ProductA createProductA();

public abstract ProductB createProductB();

/

}

//多系列体现在ConcreteFactoryA,ConcreteFactoryB这些具体工厂创建该系列下的多个相互关联的对

public class ConcreteFactoryA extends AbstractFactory{

//具体创建ProductA,ProductB 的哪个子类再这里指定,如

//这里相互关联的对象体现在ProductA1和ProductB1够成第一种风格

public ProductA createProductA(){

return new ProductA1();

return new ProductB1();

}

}

public class ConcreteFactoryB extends AbstractFactory{

//具体创建ProductA,ProductB 的哪个子类再这里指定,如

public ProductA createProductA(){

return new ProductA2();

return new ProductB2();

}

}

public abstract class ProductA{

//其子类是ProductA1,ProductA2

//定义一些接口;

public void someMethod();

//

}

public abstarct class ProductB{

//其子类是ProductB1,ProductB2

//定义一些接口;

public void someMethod();

//

}

public class Test{

ProductA a;

ProductB b;

public static void main(String[] args){

//客户端要创建不同风格的游戏场景(多系列)

AbstractFactory factory new ConcreteFactoryA();

ProductA a factory.createProductA();

ProductB b factory.createProductB();

play();

//创建另一种风格的游戏场景,只须更改ConcreteFactoryB();

//

//AbstractFactory factory new ConcreteFactoryA();

//ProductA a factory.createProductA();

//ProductB b factory.createProductB();

//play();

}

public static void play(){

180 Java 设计模式应用案例(第 2 ) public CellContext2(String strPhone, String name, float price){ this.strPhone = strPhone; this.name = name; this.price = price; } public int getMark(){ int mark = 0; if(price > ICellState.NORMAL_LIMIT) mark = NORMAL_STATE; else if(price < ICellState.STOP_LIMIT) mark = STOP_STATE; else mark = OVERDRAW_STATE; return mark; } public void setState(){ int curMark = getMark(); if(curMark == mark) return; mark = curMark; switch(mark){ case NORMAL_STATE: state = new NormalState();break; case OVERDRAW_STATE: state = new OverDrawState();break; case STOP_STATE: state = new StopState();break; } } public void save(float price){ this.price += price; } public void cost(int minute){ this.price -= ICellState.COST_MINUTE*minute; } public boolean phone(){ state.phone(this); return true; } } setState()方法设置当前手机用户状态,算法主要原理是:根据余额获取当前状态标识 curMark, 并与前一状态标识 mark 进行对比。若两者相等,表明是同一状态,则返回;否则根据 mark 标识确 定当前手机用户所处状态。 本例中实时设置状态有两种情况:第一种情况,打完电话后进行设置,这在三个具体状态类中 已经进行描述了;第二种情况,存款后进行设置,也就是说,存款后要注意调用一次 setState()方法。 13.4 应用示例 【例 13-1】计算机内存监控程序。 设计算机物理总内存为 total,空闲内存为 free,则有公式 free ratio= total ,表示内存空闲率。设 两个阈值为 high、mid,high>mid。若 ratio high,则空闲率相当高,表明内存处于"充裕"状态; 第 13 章 状态模式 181 若 mid ratio<high,则空闲率正常,表明内存处于"良好"状态;若 ratio<mid,则空闲率低,表 明内存处于"紧张"状态。 先看程序执行界面,如图 13-3 所示。 图 13-3 内存监测界面图 程序主要完成以下功能: 界面上可以输入阈值 high,mid,有"开始监测" "停止监测"按钮; 按字节显示总内存、空闲内存大小,显示空闲率; 显示当前内存状态,以及此状态的持续时间, 单位是小时。 很明显,界面由三个子面板组成:上方的参数控制面板、中间的数值显示面板、下方的状态面 板,因此主要完成这三个类,再加上主窗口类共四个类的编制即可。下面一一进行说明。 1.参数控制面板类 CtrlPanel class CtrlPanel extends JPanel{ JComponent c[] = {new JTextField(4),new JTextField(4), new JButton("开始监测"),new JButton("停止监测")}; boolean bmark[][] = {{true,true,true,false}, {false,false,false,true}}; ActionListener startAct = new ActionListener(){ //"开始监测"按钮响应 public void actionPerformed(ActionEvent e){ setState(1); //设置组件使能状态 int high = Integer.parseInt(((JTextField)c[0]).getText());//取出高阈值 int low = Integer.parseInt(((JTextField)c[1]).getText()); //取出低阈值 Container c = CtrlPanel.this.getParent(); //获
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值