Design Patterns教程-外观模式
外观模式表示 “提供一个统一和简化的接口,以便于使用子系统的一组接口,从而隐藏客户端的子系统复杂性”。
换句话说,外观模式描述了一个使子系统更易于使用的高级接口。
实际上,每个抽象工厂都是一种外观。
外观模式的优点
- 它屏蔽了子系统组件的复杂性。
- 它促进了子系统与其客户端之间的松耦合。
外观模式的使用:
适用于以下情况:
- 当你希望为复杂的子系统提供一个简单的接口时。
- 当存在多个客户端与抽象实现类之间的依赖关系时。
外观模式示例
让我们通过上面的 UML 图来理解外观设计模式的示例。
外观模式的 UML:
实现上述 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
创建一个 客户端,通过 ShopKeeper 从 MobileShop 购买手机。
文件: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