java中23种设计模式之6-外观模式(facade pattern)

概念:为子系统中的一组接口提供一个统一接口。Facade模式定义了一个高层接口,这个接口使得这子系统更容易使用。

应用场景:

1)为一个复杂子系统提供一个简单接口。

2)提高子系统的独立性。

3)在层次化结构中,可以使用Facade模式定义系统中每一层的入口。

以大型娱乐商场提供的休闲一条龙服务为例,包括购物,餐饮,按摩。其中购物,按摩,餐饮作为子系统的组成,提供统一对外接口PackageService

类图如下:

class Shopping
{
String customer=null;
public Shopping(String customer)
{
this.customer=customer;
}

public void doService()
{
System.out.println("Shopping service for "+customer);
}
}

class Meal
{
String customer=null;
public Meal(String customer)
{
this.customer=customer;
}

public void doService()
{
System.out.println("Meal service for "+customer);
}
}

class Massage
{
String customer=null;
public Massage(String customer)
{
this.customer=customer;
}

public void doService()
{
System.out.println("Massage service for "+customer);
}
}
class PackageService
{
String customer=null;
Shopping aShopping=null;
Meal aMeal=null;
Massage aMassage=null;
public PackageService(String customer)
{
this.customer=customer;
aShopping=new Shopping(customer);
aMeal=new Meal(customer);
aMassage=new Massage(customer);
}
public void doService()
{
aShopping.doService();
aMeal.doService();
aMassage.doService();
}
}
public class FacadePatternTest
{
public static void main(String[] args)
{
String customer="wudy";
Shopping aShopping=new Shopping(customer);
aShopping.doService();
Meal aMeal=new Meal(customer);
aMeal.doService();
Massage aMassage=new Massage(customer);
aMassage.doService();
//----------------------
System.out.println("------now is use facade pattern-------");
PackageService aPackageService=new PackageService(customer);
aPackageService.doService();
}
}

////////////////////////////////////////

输出结果:

Shopping service for wudy
Meal service for wudy
Massage service for wudy
------now is use facade pattern-------
Shopping service for wudy
Meal service for wudy
Massage service for wudy

时间: 2024-10-27 10:35:29

java中23种设计模式之6-外观模式(facade pattern)的相关文章

java中23种设计模式之13-组合模式(composite pattern)

import java.util.LinkedList;abstract class Company{ private String name; public void setName(String name) { this.name=name; } public String getName() { return name; } abstract void add(Company company); abstract void remove(Company company); abstract

java中23种设计模式之5-多例模式(multition pattern)

顾名思义,多例模式相对于单例模式,就是可以有多于一个的有限实例,如下列,只能有两个实例. import java.util.ArrayList;import java.util.Random;class Multition{ private final static int MAX_NUMBER=2; private static ArrayList<Multition> aMultitionArrayList=new ArrayList<Multition>(); private

java中23种设计模式之18-原型模式(Prototype pattern)

class Something{ public String something=null;}class Prototype implements Cloneable{ private String name; public Something aSomething=new Something(); public void setName(String name) { this.name=name; } public String getName() { return name; } publi

java中23种设计模式之12-装饰模式(decorator pattern)

class Girl { public void showAppearance() { System.out.println("the girl: face without make up"); } } class TakeFlower extends Girl { Girl girl=null; public TakeFlower(Girl girl) { this.girl=girl; } public void showAppearance() { girl.showAppear

java中23种设计模式之17-状态模式(state pattern)

interface State{ public void handle(StateMachine statemachine);} class Eat implements State{ StateMachine statemachine=null; public void handle(StateMachine statemachine) { System.out.println("eat"); this.statemachine=statemachine; this.statemac

java中23种设计模式之10-代理模式(Proxy pattern)

interface Station{ void sellTickets();}class TrainStation implements Station{ public TrainStation() { } public void sellTickets() { System.out.println("TrainStation selling tickets"); }} class TrainStationProxy implements Station{ private TrainS

java中23种设计模式之4-单例模式(singleton pattern)

作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 单例类只能有一个实例. 单例类必须自己创建自己的唯一实例. 单例类必须给所有其他对象提供这一实例. 一般是通过private 来描述构造函数,禁止从外部构造对象,通过getInstance来获取唯一的实例. class Singleton{ private static Singleton aSingleton=null; private static int indexSingleton=0; pr

java中23种设计模式之7-适配器模式(adapter pattern)

class Barrel{ public void getOilFromBarrel() { System.out.println("get oil from Barrel ok"); }}class Funnel implements Bottle{ private Barrel aBarrel=new Barrel(); public void getOil() { aBarrel.getOilFromBarrel(); }}interface Bottle{ void getOi

java中23种设计模式之10-桥梁模式(bridge pattern)

abstract class Vehicle{ VehicleImpl aVehicleImpl=null; public Vehicle(VehicleImpl vehicleImpl) { aVehicleImpl=vehicleImpl; } void transport() { aVehicleImpl.transportImpl(); }}interface VehicleImpl{ void transportImpl();}class TransportPeople impleme