外观模式表示 “提供一个统一和简化的接口,以便于使用子系统的一组接口,从而隐藏客户端的子系统复杂性”

换句话说,外观模式描述了一个使子系统更易于使用的高级接口。

实际上,每个抽象工厂都是一种外观

外观模式的优点

  • 它屏蔽了子系统组件的复杂性。
  • 它促进了子系统与其客户端之间的松耦合。

外观模式的使用:

适用于以下情况:

  • 当你希望为复杂的子系统提供一个简单的接口时。
  • 当存在多个客户端与抽象实现类之间的依赖关系时。

外观模式示例

让我们通过上面的 UML 图来理解外观设计模式的示例。

外观模式的 UML:

5-1.jpg

实现上述 UML:

步骤 1

创建一个 MobileShop 接口。

文件:MobileShop.java

public interface MobileShop {
    public void modelNo();
    public void price();
}

步骤 2

创建一个实现 MobileShop 接口的 Iphone 类。

文件:Iphone.java

public class Iphone implements MobileShop {
    @Override
    public void modelNo() {
        System.out.println(" Iphone 6 ");
    }

    @Override
    public void price() {
        System.out.println(" Rs 65000.00 ");
    }
}

步骤 3

创建一个实现 MobileShop 接口的 Samsung 类。

文件:Samsung.java

public class Samsung implements MobileShop {
    @Override
    public void modelNo() {
        System.out.println(" Samsung galaxy tab 3 ");
    }

    @Override
    public void price() {
        System.out.println(" Rs 45000.00 ");
    }
}

步骤 4

创建一个实现 MobileShop 接口的 Blackberry 类。

文件:Blackberry.java

public class Blackberry implements MobileShop {
    @Override
    public void modelNo() {
        System.out.println(" Blackberry Z10 ");
    }

    @Override
    public void price() {
        System.out.println(" Rs 55000.00 ");
    }
}

步骤 5

创建一个使用 MobileShop 接口的 ShopKeeper 类。

文件:ShopKeeper.java

public class ShopKeeper {
    private MobileShop iphone;
    private MobileShop samsung;
    private MobileShop blackberry;

    public ShopKeeper() {
        iphone = new Iphone();
        samsung = new Samsung();
        blackberry = new Blackberry();
    }

    public void iphoneSale() {
        iphone.modelNo();
        iphone.price();
    }

    public void samsungSale() {
        samsung.modelNo();
        samsung.price();
    }

    public void blackberrySale() {
        blackberry.modelNo();
        blackberry.price();
    }
}

步骤 6

创建一个 客户端,通过 ShopKeeperMobileShop 购买手机。

文件:FacadePatternClient.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class FacadePatternClient {
    private static int choice;

    public static void main(String args[]) throws NumberFormatException, IOException {
        do {
            System.out.print("========= Mobile Shop ============ \n");
            System.out.print("      1. IPHONE.       \n");
            System.out.print("      2. SAMSUNG.       \n");
            System.out.print("      3. BLACKBERRY.      \n");
            System.out.print("      4. Exit.           \n");
            System.out.print("Enter your choice: ");

            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            choice = Integer.parseInt(br.readLine());
            ShopKeeper sk = new ShopKeeper();

            switch (choice) {
                case 1: {
                    sk.iphoneSale();
                }
                break;
                case 2: {
                    sk.samsungSale();
                }
                break;
                case 3: {
                    sk.blackberrySale();
                }
                break;
                default: {
                    System.out.println("Nothing You purchased");
                }
                return;
            }

        } while (choice != 4);
    }
}

输出

========= Mobile Shop ============
      1. IPHONE.
      2. SAMSUNG.
      3. BLACKBERRY.
      4. Exit.
Enter your choice: 1
Iphone 6
Rs 65000.00
========= Mobile Shop ============
      1. IPHONE.
      2. SAMSUNG.
      3. BLACKBERRY.
      4. Exit.
Enter your choice: 2
Samsung galaxy tab 3
Rs 45000.00
========= Mobile Shop ============
      1. IPHONE.
      2. SAMSUNG.
      3. BLACKBERRY.
      4. Exit.
Enter your choice: 3
Blackberry Z10
Rs 55000.00
========= Mobile Shop ============
      1. IPHONE.
      2. SAMSUNG.
      3. BLACKBERRY.
      4. Exit.
Enter your choice: 4
Nothing You purchased

标签: Design Patterns, Design Patterns教程, 设计模式, 软件设计, 结构型模式, 行为型模式, 单例模式, 工厂模式, 观察者模式, 中介者模式, 访问者模式