設計模式——門面模式

1、引言

  不少時候咱們只是知道一個物品,至於它是怎麼產生的,咱們不得而之。好比郵局裏面是怎麼操做信件的,咱們只是須要將寫的情信拿到郵箱就能夠了,並不用理會它將經過怎麼一個形式,或者怎麼的途徑將我表達的愛傳播出去的。這也致使了以前咱們很樂意的花錢買三聚氰胺奶粉來喝。spring

2、門面模式

  1. 定義:門面模式了叫外觀模式,它提供一個高層次的接口,使得子系統更易於使用,門面模式注重「統一對象」,也就是提供一個訪問子系統的接口,除了這個接口不容許有任何訪問子系統的行爲發生。spa

  2. 示意圖:【以下圖所示】prototype

  3. 示意圖說明:門面模式,是提供給客戶調用的一個途徑,使得客戶端沒必要與底層的子系統進行交互。屏蔽高層對低層的直接訪問。如圖,當咱們在Spring裏取Bean的時候,只須要調用ServiceFacade就好了,而無須直接接觸相應的Bean。code

3、門面模式示例

  1. Service對象

package com.swyma.spring.service;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;

/**
 * 登陸 Service
 * @author yemaoan
 *
 */
@Service
@Scope("prototype")
public class LoginService extends BasicService {

    public void check(String username, String password) {
        
    }
    
    public void handle() {
        System.out.println("login handle");
    }
}
package com.swyma.spring.service;

import org.springframework.stereotype.Service;

/**
 * 註冊 Service
 * @author yemaoan
 *
 */
@Service
public class RegisterService extends BasicService {

    public void create() {
        
    }
    
}
package com.swyma.spring.service;

import org.springframework.stereotype.Service;

import com.swyma.spring.entity.User;

/**
 * 用戶 Service
 * @author yemaoan
 *
 */
@Service
public class UserService extends BasicService {

    
    public void create(User user) {
        
    }
    
    public void modify(User user) {
        
    }
    
    public void delete(User user) {
        
    }
    
}

  2. ServiceFacadeblog

package com.swyma.spring.service;

import com.swyma.spring.core.ISpringContext;

/**
 * Service門面
 * @author yemaoan
 *
 */
public class ServiceFacade {

    /**
     * 取Spring上下文
     * @return
     */
    public static ISpringContext getContext() {
        ISpringContext context = new BasicSpringContext();
        return context;
    }
    
    public static LoginService getLoginService() {
        return getContext().lookup(LoginService.class);
    }
    
    public static UserService getUserService() {
        return getContext().lookup(UserService.class);
    }
    
    public static RegisterService getRegisterService() {
        return getContext().lookup(RegisterService.class);
    }
    
}

  3. Client接口

package com.swyma.spring.test;

import org.junit.Test;

import com.swyma.spring.core.ISpringContext;
import com.swyma.spring.entity.User;
import com.swyma.spring.service.BasicSpringContext;
import com.swyma.spring.service.LoginService;
import com.swyma.spring.service.RegisterService;
import com.swyma.spring.service.ServiceFacade;
import com.swyma.spring.service.UserService;


/**
 * JUintTest
 * @author yemaoan
 *
 */
public class TestSpringEnv {
    
    @Test
    public void testFacade() {
        ServiceFacade serviceFacade = new ServiceFacade();
        LoginService loginService = serviceFacade.getLoginService();
        loginService.handle();
    }
    
}

4、總結

  1. 門面是一個很好的封裝方法,用於向客戶端提供一個訪問子系統的途徑。get

  2. 門面模式不參與子系統內的業務邏輯,便是它不能控制子系統的裏規定的流程。it

  3. 門面對象知曉子系統的所有功能和責任,它是一個沒有實際業務邏輯的委託類。io

相關文章
相關標籤/搜索