不少時候咱們只是知道一個物品,至於它是怎麼產生的,咱們不得而之。好比郵局裏面是怎麼操做信件的,咱們只是須要將寫的情信拿到郵箱就能夠了,並不用理會它將經過怎麼一個形式,或者怎麼的途徑將我表達的愛傳播出去的。這也致使了以前咱們很樂意的花錢買三聚氰胺奶粉來喝。spring
1. 定義:門面模式了叫外觀模式,它提供一個高層次的接口,使得子系統更易於使用,門面模式注重「統一對象」,也就是提供一個訪問子系統的接口,除了這個接口不容許有任何訪問子系統的行爲發生。spa
2. 示意圖:【以下圖所示】prototype
3. 示意圖說明:門面模式,是提供給客戶調用的一個途徑,使得客戶端沒必要與底層的子系統進行交互。屏蔽高層對低層的直接訪問。如圖,當咱們在Spring裏取Bean的時候,只須要調用ServiceFacade就好了,而無須直接接觸相應的Bean。code
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(); } }
1. 門面是一個很好的封裝方法,用於向客戶端提供一個訪問子系統的途徑。get
2. 門面模式不參與子系統內的業務邏輯,便是它不能控制子系統的裏規定的流程。it
3. 門面對象知曉子系統的所有功能和責任,它是一個沒有實際業務邏輯的委託類。io