zoukankan      html  css  js  c++  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;
    	}
    
    }



     

     

     

  • 相关阅读:
    一、区块链,这次不容错过
    二、常用固件升级
    2.监控利器nagios手把手企业级实战第一部
    四、NOSQL之Redis持久化缓存服务基础实战第三部
    三、NOSQL之Memcached缓存服务实战精讲第二部
    linux重装docker-compose后无法执行docker-compose命令
    mongodb启用auth,使用密码登录
    Vue的三个点es6知识,扩展运算符
    关于同一台服务器上两个PHP项目相互访问超时的问题
    ffmpeg生成视频封面图
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3178090.html
Copyright © 2011-2022 走看看