工厂模式 - 程序实现(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 ...
随机推荐
- PHP设计模式之:策略模式
<?phpabstract class Strategy{ public abstract function AlgorithmInterface();} class ConcreteSt ...
- C#程序:如何创建xml文件以及xml文件的增、删、改、查
其实今天的这篇博文 ,是对请几天发表的博文的一个总结,只是想把xml文件的增删改查结合起来,这样更容易让初学的朋友理解,废话也不多说了,开始吧! 下面是我把我在vs环境下写的代码ctrl+V然后ctr ...
- [转] 博闻强识:了解CSS中的@ AT规则 ---张鑫旭
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=4900 大家可能在CS ...
- ubuntu 14.04 安装preforce
官网: http://www.perforce.com/ http://www.perforce.com/support-services 1. 下载相关文件 http://filehost.perf ...
- Find your present (2) (位异或)
Problem Description In the new year party, everybody will get a "special present".Now it's ...
- NET Core站点部署到Linux服务器
.NET跨平台之旅:将QPS 100左右的ASP.NET Core站点部署到Linux服务器上 今天下午我们将生产环境中一个单台服务器 QPS(每秒请求数)在100左右的 ASP.NET Core 站 ...
- Java POI 导出EXCEL经典实现 Java导出Excel
转自http://blog.csdn.net/evangel_z/article/details/7332535 在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者 ...
- 【POJ1743】不可重叠最长重复子串
题意:求一个字符串里两个不重叠的最长重复子串 代码如下: #include<cstdio> #include<cstdlib> #include<cstring> ...
- tomcat 系统架构与设计模式 第二部分 设计模式 转
Tomcat 系统架构与设计模式,第 2 部分: 设计模式分析 许 令波, Java 开发工程师, 淘宝网 许令波,现就职于淘宝网,是一名 Java 开发工程师.对大型互联网架构设计颇感兴趣,并对一些 ...
- TCP/IP 邮件的原理
邮件通过SMTP协议来实现,有它的服务器SMTP服务器. 它是怎么在万维网中运行的呢? 我们来看看两个案例,下面的两个图来展示. 案例一: Alice通过传统的邮件服务器发送给Bob,Bob通过HTT ...