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)的更多相关文章

  1. Java设计模式之-----工厂模式(简单工厂,抽象工厂)

    一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...

  2. java 深入浅出工厂模式

    一.引子 话说十年前,有一个暴发户,他家有三辆汽车——Benz奔驰.Bmw宝马.Audi奥迪,还雇了司机为他开车.不过,暴发户坐车时总是怪怪的:上Benz车后跟司机说“开奔驰车!”,坐上Bmw后他说“ ...

  3. 学习:java设计模式—工厂模式

    一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类: 1)简单工厂模式(Simple Facto ...

  4. Java设计模式系列之工厂模式

    工厂模式将大量有共同接口的类实例化,工厂模式可以实现动态决定实例化哪一个类的对象,工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factory):添加某一种类型的 ...

  5. java三种工厂模式

    适用场合: 7.3 工厂模式的适用场合 创建新对象最简单的办法是使用new关键字和具体类.只有在某些场合下,创建和维护对象工厂所带来的额外复杂性才是物有所值.本节概括了这些场合. 7.3.1 动态实现 ...

  6. Java设计模式02:常用设计模式之工厂模式(创建型模式)

    一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的.  工厂模式在<Java与模式>中分为三类: 1)简单工厂模式(Simple Fact ...

  7. 工厂模式Java

    一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...

  8. java设计模式—工厂模式

    一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...

  9. Java设计模式——工厂模式

    一.工厂模式分类 工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类: (1)简单工厂模式(Simp ...

随机推荐

  1. 微信菜单开发:使用PHP数组来定义微信菜单

    目前使用数组的方式来定义,然后在通过json_encode函数来转JSON $menuJson=array(); $menuJson['button'][]=array('name'=>urle ...

  2. Python 学习之urllib模块---用于发送网络请求,获取数据(2)

    接着上一次的内容. 先说明一下关于split()方法:它通过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串(把一个字符串分割成很多字符串组成的list列表) 语法: ...

  3. 【python】【转】Python生成随机数的方法

    如果你对在Python生成随机数与random模块中最常用的几个函数的关系与不懂之处,下面的文章就是对Python生成随机数与random模块中最常用的几个函数的关系,希望你会有所收获,以下就是这篇文 ...

  4. python路径函操作

    #判断是否为文件 os.path.isfile   #判断是否为目录 os.path.isdir   #返回文件名 os.path.basename(path)   #返回文件目录 os.path.d ...

  5. 2016 Multi-University Training Contest 2 第一题Acperience

    Acperience Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Probl ...

  6. jdk各个版本

    http://www.cnblogs.com/langtianya/p/3757993.html

  7. SignalR介绍与Asp.net,前台即时通信【转】

    SignalR 是一个asp.net异步库,它提供广播消息到多个client端的机制. SignalR能用来持久客户端与服务端的连接,让我们便于开发一些实时的应用,例如聊天室在线预订系统,股票交易等实 ...

  8. 创新高性能移动 UI 框架-Canvas UI 框架

    WebView 里无法获得的能力虽然是「体验增强」与「端基本能力」,但现都基本上有成熟解决方法.但后期的 UI 和 Layout 的性能反而是目前 Web 技术欠缺的.所以,无论是 Titanium ...

  9. html5自定义标签选择器

    * E[attr]:只使用属性名,但没有确定任何属性值 * E[attr="value"]:指定属性名,并指定了该属性的属性值.必须和元素的属性完全匹配 * E[attr~=&qu ...

  10. 搭建DirectUi开发平台

    DirectUi的效果可以使用GDI.GDI+.DirectX.OpenGL实现,常用的有GDI和GDI+,后两种有杀鸡用牛刀的感觉.在网络上能找到此方面的教材 现在的软件越来越多的有很炫目的界面,看 ...