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

facade(外观模式)

    层结构与外观模式        分层体系结构是一个时髦的话题,理论上讲,分层结构可以使系统更为清晰,更具可维护性。然而,在实践中,如果层次划分不合理,就会产生数据和功能的冗余。        ...
  • hwg9741
  • hwg9741
  • 2008-10-27 16:07:00
  • 326

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

因为软件体系结构的设计模式太多了,如果用的不多,shi
  • u013712592
  • u013712592
  • 2014-05-28 22:27:56
  • 1474

软件设计模式与体系结构

  • 2014年11月13日 17:48
  • 96.01MB
  • 下载

浅谈JAVA设计模式之——外观模式(Facade)

一、概述 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 二、适用性 1.当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断...
  • l1028386804
  • l1028386804
  • 2015-05-07 23:32:13
  • 3611

Java设计模式菜鸟系列(九)外观模式建模与实现

外观模式(Facade):是为了解决类与类之间的依赖关系的,像spring一样,可以将类与类之间的关系配置到配置文件中,而外观模式就是将他们的 关系放在一个Facade类中,降低了类与类之间的耦合度,...
  • JAVE_LOVER
  • JAVE_LOVER
  • 2014-10-05 20:46:52
  • 2649

JAVA设计模式之门面模式(外观模式)

医院的例子   现代的软件系统都是比较复杂的,设计师处理复杂系统的一个常见方法便是将其“分而治之”,把一个系统划分为几个较小的子系统。如果把医院作为一个子系统,按照部门职能,这个系统可以划分为挂号、门...
  • jason0539
  • jason0539
  • 2014-04-02 07:16:24
  • 28518

软件体系结构实验报告--设计模式2

  • 2010年12月18日 21:22
  • 1.02MB
  • 下载

Java 设计模式——外观模式

今天要说的外观模式是一个相对简单的设计模式,而且在日常的开发中,可能你也会时常使用它,只是你可能并未想过这是一个设计模式。本文会从一些实例着手,来对本文要说明的外观模式进行尽可能全面的讲解。希望于你有...
  • u013761665
  • u013761665
  • 2016-06-06 00:11:17
  • 3563

《Java设计模式》之外观模式

外观模式(Facade pattern)涉及到子系统的一些类。所谓子系统,是为提供一系列相关的特征(功能)而紧密关联的一组类。例如,一个Account类、Address类和CreditCard类相互关...
  • u011225629
  • u011225629
  • 2015-08-16 08:00:49
  • 1591

软件体系结构实验报告(设计模式)

  • 2010年12月28日 17:45
  • 604KB
  • 下载
收藏助手
不良信息举报
您举报文章:java软件体系结构设计模式----外观
举报原因:
原因补充:

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