版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、信息系统分析与设计,1/26,2011年3月,信息系统分析与设计第二章 设计模式,FactoryMethod模式,综合例子,Mobile.java public interface Mobile public void call (); Nokia.java public class Nokia implements Mobile public void call () System.out.println(“Nokia Mobile”); Motorola.java public class Motorola implements Mobile public void call () Sys
2、tem.out.println(“Motorola Mobile”); ,综合例子2,MobileFactory.java public class MobileFactory public Mobile getMobile (String title) throws Exception if(title.equlasIgnoreCase(“nokia”) return new Nokia(); else if (title.equalsIgnoreCase(“motorola”) return new Motorola(); else throws new Exception (“no su
3、ch mobile”); ,综合例子3,SimpleFactoryClient.java public class SimpleFactoryClient public static void main(String args) try MobileFactory mf=new MobileFactory(); Mobile m; m=mf.getMobile(“nokia”); m.call(); m=mf.getMobile(“motorola”); m.call(); catch(Exception e)e.printStackTrace(); ,信息系统分析与设计,5/26,2011年
4、3月,工厂模式,意图 定义一个创建对象的接口,但由其子类决定实例化哪个类,工厂方法将类的实例化延迟到子类 问题 一个类需要实例化另外一个类的子类,但不知是哪一个,工厂模式允许子类进行决策 解决方案 子类对实例化哪个类以及如何实例化作出决策,信息系统分析与设计,6/26,2011年3月,参与者与协作者 Product是工厂方法所创建的对象类型的接口,Creator是定义工厂方法的接口 效果 客户将需要继承Creator,以创建特定的concreteProduct对象 实现 在抽象类中使用一个抽象方法。需要实例化一个被包含对象的时候抽象类的代码将引用此方法,但不知道需要的对象是哪一个。,信息系统分
5、析与设计,7/26,2011年3月,一般结构图 Creator f = new ConcreteCreator(); Product p = f.factoryMethod();,Creator f = new ConcreteCreator(); Product p = f.factoryMethod();,信息系统分析与设计,9/26,2011年3月,一般结构图,信息系统分析与设计,10/26,2011年3月,举例,假设完成一个银行管理信息系统时需要一个Bank类,可以创建SavingAccount和CreditAccount两种类型的帐户,而SavingAccount和CreditAcc
6、ount账户的大部分操作是相同的,可以继承同一个父类Account。现在编写具体的银行IcbcBank试类及测试类Client,利用FactoryMethod模式,实现创建不同类型的账户。,public class Bank public Account createAccount(String type) /该方法具体实现根据type类型不同创建不同的账户 public abstract void addUser(Account acc); public abstract Vector getUsers(); public class IcbcBank extends Bank /维护保存账
7、户集合信息 ,public abstract class Account public class SavingAccount extends Account public SavingAccount() System.out.println(“create saving account”); public class CreditAccount extends Account public CreditAccount() System.out.println(“create credit account”); ,import java.util.*; public class Test pu
8、blic static void main(String args) Bank bank=new IcbcBank(); Account acc1=bank.createAccount(“1”); Account acc2=bank.createAccount(“2”); bank.addUser(acc1); bank.addUser(acc2); System.out.println(output all users information); Iterator it=(bank.getUsers().iterator(); while(it.hasNext() System.out.pr
9、intln(it.next(); ,信息系统分析与设计,14/26,2011年3月,输出结果: create saving account create credit account output all users information bankfactory.SavingAccount15ff48b bankfactory.CreditAccountaffc70,信息系统分析与设计,15/26,2011年3月,练习,示例中无法区分建立帐号的唯一性,请在Account类中加上帐号的流水号码和类型属性;同时为了保证只有一个银行类实例,在IcbcBank类中引入单例模式,并产生唯一的流水号码。
10、仿照GenerateID类方法。 思考:此处为什么不在Bank类中引入单例模式?,public class Bank public Account createAccount(String type,int serial) Account acc=null; if (type.equals(“1”) acc = new SavingAccount(type,serial); else if (type.equals(“2”) acc = new CreditAccount(type,serial); return acc; public abstract void addUser(Accoun
11、t acc); public abstract Vector getUsers(); ,public class IcbcBank extends Bank Vector users=new Vecotr(); private int serial=100; public void addUser(Account acc) users.add(acc); public Vector getUsers() return users; private IcbcBank() private static IcbcBank icbc=new IcbcBank(); public static Icbc
12、Bank getInstance() return icbc; public int getSerial() return serial+; ,public class Account private int serial; private String type; public int getSerial() return serial; public Account(String type,int serial) this.type=type; this.serial=serial; public void setSerial(int s) this.serial=s; public cl
13、ass SavingAccount extends Account public SavingAccount(String type,int s) super(type,s); public class CreditAccount extends Account public CreditAccount(String type,int s) super(type,s); ,import java.util.*; public class Test public static void main(String args) IcbcBank bank=IcbcBank.getInstance();
14、 Account acc1=bank.createAccount(1,bank.getSerial(); Account acc2=bank.createAccount(2,bank.getSerial(); bank.addUser(acc1); bank.addUser(acc2); System.out.println(output all users information); Iterator it=(bank.getUsers().iterator(); while(it.hasNext() System.out.println(Account id=+ (Account)it.next().getSerial(); ,信息系统分析与设计,20/26,2011年3月,输出结果: output all users information Account id=100 Account id=101 Account id=102 Account id=103,信息系统分析与设计,21/26,2011年3月,作业,示例中是根据类型生产不同的产品,修改为根据传入的类名生产产品,减少对具体类的依赖 在上述代码基础上,实现构造方法带参数,信息系统分析与设计,22/26,2011年3月,优点 E
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年大学第四学年(农村社会学)农村社区治理模式测试题及答案
- 云南省德宏市重点中学2026届初三下学期1月期末考试英语试题含解析
- 浙江省嘉兴市海宁市2026年初三物理试题下学期第一次月考试题含解析
- 云南省丽江市华坪县2026年初三热身考试英语试题含解析
- 山西省运城市重点中学2025-2026学年初三一诊模拟考试(一)英语试题含解析
- 浙江省天台县2026年第一次高中毕业生复习统一检测试题语文试题含解析
- 云南省昆明官渡区五校联考2025-2026学年初三年级下学期数学试题周末卷含附加题含解析
- 2026年中国避暑旅游市场数据研究及竞争策略分析报告
- 2025 高中新闻类阅读理解之导语作用课件
- 2026年中小型园林机械企业的市场生存之道
- 《特种设备使用管理规则 TSG08-2026》解读
- 制药厂绩效考核制度
- 2022鞘内药物输注技术用于癌痛管理的中国专家共识
- 2026年安徽水利水电职业技术学院单招职业技能考试题库含答案详细解析
- 2025-2030中国成像流式细胞仪市场行情走势与投资前景研究研究报告
- 2026年及未来5年市场数据中国植物照明行业发展潜力预测及投资策略研究报告
- 2026江苏徐州地铁集团下属运营公司招聘笔试备考试题及答案解析
- 2026中国硅射频器件行业需求规模与应用趋势预测报告
- 2025年国盛证券股份有限公司总部社会招聘(10人)笔试参考题库附带答案详解
- 医疗场景人因工程学-洞察与解读
- UG NX 10.0完全自学指南
评论
0/150
提交评论