java软件体系结构设计模式----外观

原创 2011年10月17日 10:14:26

说明:

外观模式用来处理子系统(subsystem)。一个子系统包含多个类,它们协同合作提供一系列相关特性。


子系统的客户需要和子系统中的多个类打交道来完成某个功能。这种客户和子系统中不同类直接打交道的方式会照成客户对象和子系统对象之间有过多的依赖关系。如果某个子系统的类要坐修改,比如改变它的接口,所有相关的类都会受到影响。


外观模式就是用于中这种场合。外观模式为整个子系统提供一种高层次的简单接口,以便减少复杂度和依赖性。这也使得子系统的使用简单,并且更容易管理。


实例:

设计一个应用,用来

a,接受客户信息(账号,地址和信用卡信息)

b,验证输入数据

c,把输入数据保存到文件中。


代码:

public class Account {


  String firstName;
  String lastName;
  final String ACCOUNT_DATA_FILE = "AccountData.txt";


  public Account(String fname, String lname) {
    firstName = fname;
    lastName = lname;
  }
  public boolean isValid() {
    /*
     Let's go with simpler validation
     here to keep the example simpler.
     */


    if (getLastName().trim().length() < 6)
      return false;


    return true;
  }
  public boolean save() {
    FileUtil futil = new FileUtil();
    String dataLine = getLastName() + "," + getFirstName();
    return futil.writeToFile(ACCOUNT_DATA_FILE, dataLine,
           true, true);


  }
  public String getFirstName() {
    return firstName;
  }
  public String getLastName() {
    return lastName;
  }


}


public class Address {


  String address;
  String city;
  String state;


  final String ADDRESS_DATA_FILE = "Address.txt";


  public Address(String add, String cty, String st) {
    address = add;
    city = cty;
    state = st;
  }
  public boolean isValid() {
    /*
     The address validation algorithm
     could be complex in real-world
     applications.
     Let's go with simpler validation
     here to keep the example simpler.
     */
    if (getState().trim().length() < 2)
      return false;


    return true;
  }
  public boolean save() {
    FileUtil futil = new FileUtil();
    String dataLine = getAddress() + "," + getCity() + "," +
                      getState();
    return futil.writeToFile(ADDRESS_DATA_FILE, dataLine,
           true, true);
  }
  public String getAddress() {
    return address;
  }
  public String getCity() {
    return city;
  }
  public String getState() {
    return state;
  }


}


public class CreditCard {


  String cardType;
  String cardNumber;
  String cardExpDate;


  final String CC_DATA_FILE = "CC.txt";


  public CreditCard(String ccType, String ccNumber,
                    String ccExpDate) {
    cardType = ccType;
    cardNumber = ccNumber;
    cardExpDate = ccExpDate;
  }


  public boolean isValid() {
    /*
     Let's go with simpler validation
     here to keep the example simpler.
     */
    if (getCardType().equals(AccountManager.VISA)) {
      return (getCardNumber().trim().length() == 16);
    }
    if (getCardType().equals(AccountManager.DISCOVER)) {
      return (getCardNumber().trim().length() == 15);
    }
    if (getCardType().equals(AccountManager.MASTER)) {
      return (getCardNumber().trim().length() == 16);
    }


    return false;
  }
  public boolean save() {
    FileUtil futil = new FileUtil();
    String dataLine =
      getCardType() + "," + getCardNumber() + "," +
      getCardExpDate();
    return futil.writeToFile(CC_DATA_FILE, dataLine, true,
           true);
  }
  public String getCardType() {
    return cardType;
  }
  public String getCardNumber() {
    return cardNumber;
  }
  public String getCardExpDate() {
    return cardExpDate;
  }


}


public class CustomerFacade {


  private String address;
  private String city;
  private String state;
  private String cardType;
  private String cardNumber;
  private String cardExpDate;
  private String fname;
  private String lname;


  public void setAddress(String inAddress) {
    address = inAddress;
  }
  public void setCity(String inCity) {
    city = inCity;
  }
  public void setState(String inState) {
    state = inState;
  }
  public void setFName(String inFName) {
    fname = inFName;
  }
  public void setLName(String inLName) {
    lname = inLName;
  }
  public void setCardType(String inCardType) {
    cardType = inCardType;
  }
  public void setCardNumber(String inCardNumber) {
    cardNumber = inCardNumber;
  }
  public void setCardExpDate(String inCardExpDate) {
    cardExpDate = inCardExpDate;
  }


  public boolean saveCustomerData() {


    Address objAddress;
    Account objAccount;
    CreditCard objCreditCard;


    /*
     client is transparent from the following
     set of subsystem related operations.
    */


    boolean validData = true;
    String errorMessage = "";


    objAccount = new Account(fname, lname);
    if (objAccount.isValid() == false) {
      validData = false;
      errorMessage = "Invalid FirstName/LastName";
    }


    objAddress = new Address(address, city, state);
    if (objAddress.isValid() == false) {
      validData = false;
      errorMessage = "Invalid Address/City/State";
    }


    objCreditCard = new CreditCard(cardType, cardNumber,
                    cardExpDate);
    if (objCreditCard.isValid() == false) {
      validData = false;
      errorMessage = "Invalid CreditCard Info";
    }


    if (!validData) {
      System.out.println(errorMessage);
      return false;
    }


    if (objAddress.save() && objAccount.save() &&
        objCreditCard.save()) {


      return true;
    } else {
      return false;
    }


  }


}


文档与源代码下载地址:http://download.csdn.net/detail/hnzhangshilong/3685894

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

java软件体系结构设计模式----适配器

说明: 一般说来,一个类的客户对象通过类提供的接口来访问它的服务。有些时候,一个类可以提供客户对象需要的功能,但它的接口却不同于客户对象的期望。 在这种情况下,已有的接口就需要被转换为客户对象所期...

java软件体系结构设计模式----rmi远程代理

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://haolloyin.blog.51cto.com/1177454/332426...

java软件体系结构设计模式----代理

一、代理模式的结构 代理模式给某一个对象提供一个代理对象,并有代理对象控制对原对象的引用。按照使用目的来划分有以下几种: 远程(Remote)代理:为一个位于不同的地址空间的对象提供一个局域代表对...

java软件体系结构设计模式------责任链

说明: 责任链(CoR)模式建议在发出请求的对象和该请求的潜在处理对象集之间建立一种低耦合的关联关系 CoR模式的一些重要特性: a,处理客户请求的潜在对象集以及它们构成链条的顺序都可以...

Java软件体系结构设计模式之结构模式 知识点摘录

以下知识点摘录自:《Java软件体系结构设计模式标准指南》一书。其中可能包含本人的一些感悟。        Java软件体系结构设计模式之结构模式(11种)        结构模式主要用来: 1)处理...

关于软件体系结构设计模式的总结

因为软件体系结构的设计模式太多了,如果用的不多,shi
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)