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

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

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

[体系结构]设计模式(一)

一、迭代器模式 提供一种方法访问一个容器(container)对象中的各个元素,而又不暴露该对象的内部细节。 类图: 用法: public interface Iterator {     pu...
  • u012422829
  • u012422829
  • 2015年03月27日 09:18
  • 669

软件体系结构

软件体系结构笔记 L1.pdf 课程简介源起... 现状系统分析员遇到的困境解决之道 基于软件体系结构的开发 示意图软件体系结构的生命周期 体系结构的非形式...
  • luyan1992
  • luyan1992
  • 2014年10月30日 20:28
  • 2211

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

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

装饰者模式与外观者模式的区别

(转载)http://bbs.bccn.net/thread-216717-1-1.html 很久没有来这一个论坛里了,一上来就看到很多关于设计模式的贴子上了精,今天我也来谈一下设计模式,我现在所介绍...
  • zhuhai__yizhi
  • zhuhai__yizhi
  • 2016年03月03日 09:55
  • 1091

java/android 设计模式学习笔记(14)---外观模式

这篇博客来介绍外观模式(Facade Pattern),外观模式也称为门面模式,它在开发过程中运用频率非常高,尤其是在现阶段各种第三方 SDK 基本很大概率都会使用外观模式。通过一个外观类使得整个系统...
  • zhao_zepeng
  • zhao_zepeng
  • 2016年07月17日 18:14
  • 3412

外观模式(注意区别于中介者模式)

一.外观模式(有点像中介者模式) 通过一个外观类使得整个系统的接口只有一个统一的高层接口,这样就能降低用户的使用成本,也就对用户屏蔽了很多实现细节,当然在我们的开发过程中,外观模式也是我们封装API的...
  • u011889786
  • u011889786
  • 2016年06月05日 21:24
  • 1593

软件体系结构设计

软件体系结构
  • shengxiaweizhi
  • shengxiaweizhi
  • 2014年11月16日 16:40
  • 344

深入浅出设计模式之命令模式、适配器模式、外观模式

命令模式
  • u011531613
  • u011531613
  • 2017年03月22日 20:42
  • 450

装饰者、适配器和外观模式详解

设计模式中,装饰者、适配器和外观模式这三种模式运用的比较多,但三者有一定的相似性,所以比较不好区分,今天我就来详细谈谈这三个模式。 1、装饰者模式      《设计模式》上的定义为:动态地将责任附加到...
  • monkey_D_feilong
  • monkey_D_feilong
  • 2016年07月21日 21:16
  • 334
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java软件体系结构设计模式----外观
举报原因:
原因补充:

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