工厂模式 - 程序实现(java)
09年5月CSDN一网友提出如下问题:
设计一个用于管理银行客户的类BankCustomer:
仅描述客户的几个重要方面:
帐号、身份证号、姓名、联系方式、密码、账户余额。
所有的成员变量均用private访问控制,因此每一个成员变量就要有相应的存取器
(getter和setter,即获取和设置其值的相应的成员方法。需要setter还是getter,还是两者都要,视情况而定) 成员方法:
开户(开户时必须要有身份证号),系统自动生成帐号,帐号使用系统时间(格式:"yyyyMMddHHmmss"14位),初始密码为“666666”。
注意开户和构造方法之间的关系。
存钱、取钱、显示账户信息、修改密码(密码最短要六位)
怎样在main中使用这个类,自行安排,要表现出你设计的类的各个方面,并在main中用英语加以注释
根据此,使用工厂模式设计如下若干类:
------------factory部分---------------------------xiaobin-------------
Customer: 抽象类(factory祖先类)
BankCustomer:继承类(factory类)
〉〉〉〉〉〉〉〉〉〉扩展部分
ContactWay:联系方式(factory引用类)
IM :实时消息(ContactWay引用类)
------------product部分---------------------------xiaobin-------------
Bank: 接口(product接口)
Account: 实现类(concrete product类)
类图如下:(使用Enterprise Architect绘制)
使用EA生成的代码如下:
Customer.java
package bankCustomer; /**
* @author xiaobin
* @version 1.0
* @created 23-5-2009 15:19:06
*/
public abstract class Customer { private Bank bank;
private double myMoney;
public Bank m_Bank; public Customer(){ } public void finalize() throws Throwable { } public abstract Bank createAccount(); public void myAccount(){ } public void mySaveMoney(){ } public void myTakeMoney(){ }
}
BankCustomer.java
package bankCustomer; /**
* @author xiaobin
* @version 1.0
* @created 23-5-2009 15:30:13
*/
public class BankCustomer extends Customer { private ContactWay contact;
private String name;
private String personID;
public Account m_Account;
public ContactWay m_ContactWay; public BankCustomer(){ } public void finalize() throws Throwable {
super.finalize();
} public Bank createAccount(){
return null;
} private ContactWay getContact(){
return null;
} private String getName(){
return "";
} private String getPersonID(){
return "";
} /**
*
* @param contactWay
*/
private void setContact(ContactWay contactWay){ } /**
*
* @param myName
*/
private void setName(String myName){ } /**
*
* @param myPersonID
*/
private void setPersonID(String myPersonID){ }
}
ContactWay.java
package bankCustomer; /**
* @author xiaobin
* @version 1.0
* @created 23-5-2009 15:30:29
*/
class ContactWay { private String email;
private IM imContact;
private String mobilePhone;
private String phone;
public IM m_IM; public ContactWay(){ } public void finalize() throws Throwable { } private String getEmail(){
return "";
} private IM getImContact(){
return null;
} private String getMobilePhone(){
return "";
} private String getPhone(){
return "";
} /**
*
* @param myEmail
*/
private void setEmail(String myEmail){ } /**
*
* @param im
*/
private void setImContact(IM im){ } /**
*
* @param mobilePhone
*/
private void setMobilePhone(String mobilePhone){ } /**
*
* @param myPhone
*/
private void setPhone(String myPhone){ }
}
IM.java
package bankCustomer; /**
* @author xiaobin
* @version 1.0
* @created 23-5-2009 15:30:39
*/
class IM { private String MSN;
private String QQ; public IM(){ } public void finalize() throws Throwable { } private String getMSN(){
return "";
} private String getQQ(){
return "";
} /**
*
* @param msn
*/
private void setMSN(String msn){ } /**
*
* @param qq
*/
private void setQQ(String qq){ }
}
Bank.java
package bankCustomer; /**
* @author xiaobin
* @version 1.0
* @created 23-5-2009 15:19:16
*/
public interface Bank { /**
*
* @param money
*/
public boolean saveMoney(double money); /**
*
* @param money
*/
public boolean takeMoney(double money); }
Account.java
package bankCustomer; /**
* @author xiaobin
* @version 1.0
* @created 07-7-2013 20:21:35
*/
public class Account implements Bank { private String accountID;
private double accountSurplus;
private Date date; public Account(){ } public void finalize() throws Throwable { } /**
*
* @param val1
* @param val2
*/
private double addAlgorithm(double val1, double val2){
return 0;
} /**
*
* @param now
*/
private String createMyAccount(Date now){
return "";
} private String getAccountID(){
return "";
} /**
*
* @param oldPWD
* @param curPWD
*/
private boolean modifyPWD(String oldPWD, String curPWD){
return false;
} /**
*
* @param money
*/
public synchronized boolean saveMoney(double money){
return false;
} private void setAccountID(){ } /**
*
* @param val1
* @param val2
*/
private double subAlgorithm(double val1, double val2){
return 0;
} /**
*
* @param money
*/
public synchronized boolean takeMoney(double money){
return false;
} }
工厂模式 - 程序实现(java)的更多相关文章
- Java设计模式之-----工厂模式(简单工厂,抽象工厂)
一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...
- java 深入浅出工厂模式
一.引子 话说十年前,有一个暴发户,他家有三辆汽车——Benz奔驰.Bmw宝马.Audi奥迪,还雇了司机为他开车.不过,暴发户坐车时总是怪怪的:上Benz车后跟司机说“开奔驰车!”,坐上Bmw后他说“ ...
- 学习:java设计模式—工厂模式
一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类: 1)简单工厂模式(Simple Facto ...
- Java设计模式系列之工厂模式
工厂模式将大量有共同接口的类实例化,工厂模式可以实现动态决定实例化哪一个类的对象,工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factory):添加某一种类型的 ...
- java三种工厂模式
适用场合: 7.3 工厂模式的适用场合 创建新对象最简单的办法是使用new关键字和具体类.只有在某些场合下,创建和维护对象工厂所带来的额外复杂性才是物有所值.本节概括了这些场合. 7.3.1 动态实现 ...
- Java设计模式02:常用设计模式之工厂模式(创建型模式)
一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类: 1)简单工厂模式(Simple Fact ...
- 工厂模式Java
一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...
- java设计模式—工厂模式
一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...
- Java设计模式——工厂模式
一.工厂模式分类 工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类: (1)简单工厂模式(Simp ...
随机推荐
- DOM对象与Jquery对象区别
- eclipse/ggts/myeclipse清除SVN用户名和密码
很多时候我们在使用eclipse/myeclipse/ggts这些开发工具进行开发的时候会有多个项目存在,不同的项目又存放在不同的svn下,需要进行svn之间的切换,如果你在创建资源库位置的时候保存了 ...
- Android中UI线程与后台线程交互设计的5种方法
我想关于这个话题已经有很多前辈讨论过了.今天算是一次学习总结吧. 在android的设计思想中,为了确保用户顺滑的操作体验.一 些耗时的任务不能够在UI线程中运行,像访问网络就属于这类任务.因此我们必 ...
- ExecuteNonQuery()返回值
查询某个表中是否有数据的时候,我用了ExecuteNonQuery(),并通过判断值是否大于0来判断数据的存在与否.结果与我所设想的很不一致,调试时才发现,其执行后返回的结果是-1,对此我很是不理解, ...
- How To mount/Browse Windows Shares【在linux{centos}上挂载、浏览window共享】
How to mount remote Windows shares Contents Required packages Basic method Better Method Even-better ...
- WebApi(三)-属性路由 自定义访问路径
启用属性路由: 1.在WebApiConfig中加入如下代码: //属性路由 config.MapHttpAttributeRoutes();
- 使用URLClassLoader类载入类实例
Tomcat当中在接受到要调用的Servlet请求后,需要载入相应的Servlet类,然后创建Servlet类实例,从而调用Servlet类实例的service()方法 下面实例的场景,request ...
- sqlserver 字符串处理函数解释
1.ASCII()返回字符表达式最左端字符的ASCII 码值.在ASCII()函数中,纯数字的字符串可不用‘’括起来,但含其它字符的字符串必须用‘’括起来使用,否则会出错.2.CHAR()将ASCII ...
- 30+最佳Ajax jQuery的自动完成插件的例子
在这篇文章中,我们将介绍35个jQuery AJAX的自动完成提示例子. jQuery 的自动完成功能,使用户快速找到并选择一定的价值.每个人都想要快速和即时搜索输入栏位,因为这个原因,许 流行的搜索 ...
- iOS开发(Objective-C)常用库索引
code4app.com 这网站不错,收集各种 iOS App 开发可以用到的代码示例 cocoacontrols.com/ 英文版本的lib收集 objclibs.com/ 精品lib的收集网站 h ...