工厂模式 - 程序实现(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 ...
随机推荐
- [转] CSS direction属性简介与实际应用 ---张鑫旭
一.用的少并不代表没有用 至少,在我接触的这么多项目里,没有见到使用过CSS direction属性做实际开发的. 为什么呢?是因为direction长得丑吗? 虽然说direction确实其貌不扬, ...
- js获取上传文件信息并及时查看
<form id="picForm" name="picForm" method="post" enctype="mult ...
- Python Standard Library 学习(一) -- Built-in Functions 内建函数
内建函数列表 Built-in Functions abs() divmod() input() open() staticmethod() all() enumerate() int() ord() ...
- android小知识
string 与 []byte 互转: public String BytesToString(byte[] data) { return new String(data); } public byt ...
- shuffle ----- mr 董西城
http://dongxicheng.org/framework-on-yarn/apache-spark-shuffle-details/
- 使用spm build 批量打包压缩seajs 代码
一,安装环境 1.安装spm spm工具是基于node(nodejs的服务平台)的,因此我们需要先安装 node 和 npm 下载地址:http://nodejs.org/#download.下载完成 ...
- The xor-longest Path
The xor-longest Path Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 3875 Accepted: 8 ...
- angularjs编码实践
AngularJS 是制作 SPA(单页面应用程序)和其它动态Web应用最广泛使用的框架之一.我认为程序员在使用AngularJS编码时有一个大的列表点应该记住,它会以这样或那样的方式帮助到你.下面是 ...
- 【Java】servlet和servlet 容器
servlet不是线程安全的,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,所以你的项目中如果只有一个servlet,那么web容器就只会创建一个实例 ...
- 开启Eclipse 智能感知代码功能
1.打开windows->Perferences..窗口,选择java->Editor->Content Assist,在右下方的“Auto Activation triggers ...