外观模式

A facade is an object that provides a simplified interface to a larger body of code, such as a class library. A facade can

  1. make a software library easier to use, understand and test, since the facade has convenient methods for common tasks,
  2. make the library more readable, for the same reason,
  3. reduce dependencies of outside code on the inner workings of a library, since most code uses the facade, thus allowing more flexibility in developing the system,
  4. wrap a poorly designed collection of APIs with a single well-designed API.

The Facade design pattern is often used when a system is very complex or difficult to understand because the system has a large number of interdependent classes or its source code is unavailable. This pattern hides the complexities of the larger system and provides a simpler interface to the client. It typically involves a single wrapper class that contains a set of members required by client. These members access the system on behalf of the facade client and hide the implementation details. The facade pattern is typically used when:

  1. a simple interface is required to access a complex system,
  2. a system is very complex or difficult to understand,
  3. an entry point is needed to each level of layered software, or
  4. the abstractions and implementations of a subsystem are tightly coupled.

“外观模式”:用函数或类进行封装实现,对外提供一个__简洁明了__的接口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
"""
Python示例代码,来自网络
ComputerFacade类封装了computer的启动过程的复杂性,用户不用关心内部实现,直接使用就好。
"""

# Complex computer parts
class CPU(object):
"""
Simple CPU representation.
"""
def freeze(self):
print("Freezing processor.")

def jump(self, position):
print("Jumping to:", position)

def execute(self):
print("Executing.")


class Memory(object):
"""
Simple memory representation.
"""
def load(self, position, data):
print("Loading from {0} data: '{1}'.".format(position, data))


class SolidStateDrive(object):
"""
Simple solid state drive representation.
"""
def read(self, lba, size):
return "Some data from sector {0} with size {1}".format(lba, size)


class ComputerFacade(object):
"""
Represents a facade for varius computer parts.
"""
def __init__(self):
self.cpu = CPU()
self.memory = Memory()
self.ssd = SolidStateDrive()

def start(self):
self.cpu.freeze()
self.memory.load("0x00", self.ssd.read("100", "1024"))
self.cpu.jump("0x00")
self.cpu.execute


computer_facade = ComputerFacade()
computer_facade.start()