门面模式 facade

门面模式 实现了子模块 与客户端 之间的松耦合 关系,从而屏蔽了 子模块内部实现的细节,只是将客户端需要的 接口提供给客户,使得子模块的组件如果发生变化不会影响客户端的使用,“松耦合,高内聚” 的体现。

一个薪水结算的例子

1 public class Salary {
2   public double getSalary(String empno){
3       return 200;
4   }
5
6 }
1 public class Holiday {
2    public double getHoliday(String empno){
3        return 2;
4    }
5 }
1 public class Tax {
2    public double getTax(String empno){
3        return 0;
4    }
5 }
1 public interface Computer {
2   public double doSalary(String empno);
3 }
 1 public class ComputerSalary implements Computer {
 2
 3     @Override
 4     public double doSalary(String empno) {
 5         Salary salary = new Salary();
 6         Holiday holiday = new Holiday();
 7         Tax tax = new Tax();
 8         Double money = salary.getSalary(empno) * (30  - holiday.getHoliday(empno))-tax.getTax(empno);
 9         return money;
10     }
11
12 }
 1 import java.io.IOException;
 2 import java.io.InputStream;
 3 import java.util.Properties;
 4
 5 public class PropertiesUtil {
 6     public static Object getInstance() {
 7         Object obj = null;
 8         try {
 9             Properties p = new Properties();
10             InputStream in = null;
11             in = Client.class.getResourceAsStream("class.properties");
12             try {
13                 p.load(in);
14             } catch (IOException e) {
15
16                 e.printStackTrace();
17             } finally {
18                 try {
19                     in.close();
20                 } catch (IOException e) {
21
22                     e.printStackTrace();
23                 }
24             }
25
26             obj = (Object) Class.forName(p.getProperty("class")).newInstance();
27         } catch (InstantiationException e) {
28
29             e.printStackTrace();
30         } catch (IllegalAccessException e) {
31
32             e.printStackTrace();
33         } catch (ClassNotFoundException e) {
34
35             e.printStackTrace();
36         }
37         return obj;
38     }
39
40
41
42 }
1 public class Client {
2     public static void main(String[] args) {
3         Computer computer = (Computer) PropertiesUtil.getInstance();
4         System.out.println(computer.doSalary("1994"));// 调用实现类方法
5     }
6
7 }

包下的 配置文件 class.properties

class = com.facade.ComputerSalary
时间: 2024-11-08 18:21:24

门面模式 facade的相关文章

设计模式之门面模式---Facade Pattern

模式的定义 门面模式(Facade Pattern)也叫做外观模式,定义如下: Provide a unified interface to a set of interfaces in a subsystem. Facade defines a highet-level interface that makes the subsystem easier to use. 要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行.门面模式提供一个高层次的接口,使得子系统更易于使用. 类型 结构

说说设计模式~门面模式(Facade)

返回目录 门面模式(Facade)属于结构型模式的一种,它符合面向对象的封装原则,但又不符合开闭原则,呵呵,今天我们主要说它的优点,不谈缺点. 定义 门面模式,是指提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口.使用子系统更容易使用. 技巧 我们在设计子类时,由于外部通过门面去访问它的功能,所以一般子类都会被声明为internal. 何时能用到它? 1.客户只需要使用某个复杂系统的子集,或者需要以一种特殊的方式与系统交互时,使用门面模式. 2.当

门面模式-Facade Pattern(Java实现)

门面模式-Facade Pattern 为一个复杂的模块或子系统提供一个简单的供外界访问的接口 本文中代码的例子如下: 一个矿场有很多矿工, 矿工的职责也都不一样. 但一样的是什么呢? 一样的就是每个矿工每天都在重复一样的事情....起床, 上班, 工作, 下班, 睡觉...... 要想管理这么多矿工的这么多事情可不简单(好麻烦啊...挨个调用的时候开发者也有可能会忘掉某个人, 或者忘掉某一个方法)., 再举个栗子, 比如操作数据库也一样, 要加载驱动, 建立连接, 操作数据库, 关闭连接. 这

外观模式 门面模式 Facade 创建型 设计模式(十三)

外观模式(FACADE) 又称为门面模式 意图 为子系统中的一组接口提供一个一致的界面 Facade模式定义了一个高层接口,这一接口使得这一子系统更加易于使用. 意图解析 随着项目的持续发展,系统基本上都是会往功能更全面的方向发展,那么也就意味着我们的系统将会变得更加复杂. 系统会被划分为多个单独的子系统,每个子系统完成一部分功能,通过分工协作完成全部功能. 一个子系统也可能进一步拆分为更小的几个子系统. 程序中的文件将会越来越多,相互关联也会变得更加复杂 当使用一个功能的时候,作为客户端 你需

Tomcat源代码-门面模式(Facade)

从Tomcat源码提炼出设计模式-门面设计模式: 概念 外部访问内部,耦合度增加,不利于扩展.而门面模式在内部基础上进行再度封装,只提供外部想要的方法.这时访问方式由“外部---内部”变为了“外部---门面对象---内部”. 目的 1 有些内部对象的方法,不想对外部得知使用,使用内部对象Facade模式,只提供给外部需要的方法,其它方法不进行显示. 2 为了降低外部与内部的耦合度,增加扩展性,内部对象可以随意改变,当然改变也是有限度的,而不会影响外部访问方式. Tomcat服务器底层处理serv

大熊君说说JS与设计模式之(门面模式Facade)迪米特法则的救赎篇------(监狱的故事)

一,总体概要 1,笔者浅谈 说起“门面”这个设计模式其实不论新老程序猿都是在无意中就已经运用到此模式了,就像我们美丽的JS程序员一样不经意就使用了闭包处理问题, 1 function Employee(name) { 2 var name = name; 3 this.say = function () { 4 console.log("I am employee " + name) ; 5 } ; 6 } 代码中“say”是一个function,Employee也是一个functio

php门面模式(facade pattern)

书上不全的代码,我自己补全的. <?php /* The facade pattern is used when we want to simplify the complexities of large systems through a simpler interface. It does so by providing convenient methods for most common tasks, through a single wrapper class used by a cli

设计模式(七)门面模式(Facade)-结构型

门面模式Facade 门面模式:统之间的接口.框架之间的衔接 (1)使用接口的形式来开发,不需要知道接口中内部方法的实现: (2)门面模式就是为子系统对外提供的一组接口提供一个统一的界面,使得其他系统对该系统的访问都通过这个统一的界面来完成. (3)当一个负载的系统需要对外提供接口时,就需要将对提供的接口统一封装在外观类里,供外系统使用. 门面模式原理图 门面模式原理图 不用门面设计模式的情况 Holiday.java public class Holiday { public double g

设计模式之禅之设计模式-门面模式

一:门面模式的定义        --->门面模式(Facade Pattern)也叫做外观模式,是一种比较常用的封装模式        --->要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行.门面模式提供一个高层次的接口,使得子系统更易于使用.        --->门面模式注重“统一的对象”,也就是提供一个访问子系统的接口,除了这个接口不允许有任何访问子系统的行为发生        --->这正是我们设计所需要的模式,不改变子系统对外暴露的接口.方法,只改变内部的