服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服务器之家 - 编程语言 - JAVA教程 - 举例分析Python中设计模式之外观模式的运用

举例分析Python中设计模式之外观模式的运用

2020-04-07 11:42像风一样的自由 JAVA教程

这篇文章主要介绍了Python中设计模式之外观模式的运用,外观模式主张以分多模块进行代码管理而减少耦合,需要的朋友可以参考下

应用特性:
在很多复杂而小功能需要调用需求时,而且这些调用往往还有一定相关性,即一调用就是一系列的。
结构特性:
把原本复杂而繁多的调用,规划统一到一个入口类中,从此只通过这一个入口调用就可以了。

代码结构示例:

?
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
class ModuleOne(object):
  def Create(self):
    print 'create module one instance'
 
  def Delete(self):
    print 'delete module one instance'
 
class ModuleTwo(object):
  def Create(self):
    print 'create module two instance'
 
  def Delete(self):
    print 'delete module two instance'
 
class Facade(object):
  def __init__(self):
    self.module_one = ModuleOne()
    self.module_two = ModuleTwo()
 
  def create_module_one(self):
    self.module_one.Create()
 
  def create_module_two(self):
    self.module_two.Create()
 
  def create_both(self):
    self.module_one.Create()
    self.module_two.Create()
 
  def delete_module_one(self):
    self.module_one.Delete()
 
  def delete_module_two(self):
    self.module_two.Delete()
 
  def delete_both(self):
    self.module_one.Delete()
    self.module_two.Delete()

有点类似代理模式,不同之处是,外观模式不仅代理了一个子系统的各个模块的功能,同时站在子系统的角度,通过组合子系统各模块的功能,对外提供更加高层的接口,从而在语义上更加满足子系统层面的需求。

随着系统功能的不断扩张,当需要将系统划分成多个子系统或子模块,以减少耦合、降低系统代码复杂度、提高可维护性时,代理模式通常会有用武之地。

再来看一个例子:

?
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
class small_or_piece1:
  def __init__(self):
    pass
   
  def do_small1(self):
    print 'do small 1'
   
class small_or_piece_2:
  def __init__(self):
    pass
   
  def do_small2(self):
    print 'do small 2'
   
class small_or_piece_3:
  def __init__(self):
    pass
   
  def do_small3(self):
    print 'do small 3'
 
class outside:
  def __init__(self):
    self.__small1 = small_or_piece1()
    self.__small2 = small_or_piece_2()
    self.__small3 = small_or_piece_3()
   
  def method1(self):
    self.__small1.do_small1()  ##如果这里调用的不只2两函数,作用就显示出来了,可以把原本复杂的函数调用关系清楚化,统一化
    self.__small2.do_small2()
     
  def method2(self):
    self.__small2.do_small2()
    self.__small3.do_small3()
 
if __name__ == '__main__':
  osd = outside()
  osd.method1()
  osd.method2()

结果:

?
1
2
3
4
do small 1
do small 2
do small 2
do small 3

 

延伸 · 阅读

精彩推荐
  • JAVA教程java使用httpclient发送post请求示例

    java使用httpclient发送post请求示例

    这篇文章主要介绍了java使用httpclient发送post请求示例,依赖JSON、HTTPClient等jar包,需要的朋友可以参考下 ...

    java教程网3462019-11-07
  • JAVA教程java基础学习笔记之泛型

    java基础学习笔记之泛型

    所谓泛型,就是变量类型的参数化。泛型是JDK1.5中一个最重要的特征。通过引入泛型,我们将获得编译时类型的安全和运行时更小的抛出ClassCastException的可...

    hebedich1542020-03-28
  • JAVA教程java实现大数加法(BigDecimal)的实例代码

    java实现大数加法(BigDecimal)的实例代码

    之前写过用vector、string实现大数加法,现在用java的BigDecimal类,代码简单很多。但是在online-judge上,java的代码运行时间和内存大得多 ...

    java代码网2082019-10-16
  • JAVA教程java线程并发semaphore类示例

    java线程并发semaphore类示例

    Java 5.0里新加了4个协调线程间进程的同步装置,它们分别是Semaphore, CountDownLatch, CyclicBarrier和Exchanger,本例主要介绍Semaphore,Semaphore是用来管理一个资源池的工...

    java教程网4742019-10-31
  • JAVA教程5种解决Java独占写文件的方法

    5种解决Java独占写文件的方法

    这篇文章主要介绍了5种解决Java独占写文件的方法,需要的朋友可以参考下 ...

    lijiao4352020-03-12
  • JAVA教程java多线程编程之使用Synchronized块同步方法

    java多线程编程之使用Synchronized块同步方法

    synchronized块来同步一个对象变量,也可以使用synchronized块来同步类中的静态方法和非静态方法,下面使用Synchronized块同步方法 ...

    java技术网4352019-11-04
  • JAVA教程JAVA比较两张图片相似度的方法

    JAVA比较两张图片相似度的方法

    这篇文章主要介绍了JAVA比较两张图片相似度的方法,涉及java针对图片像素操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下 ...

    fzhlee1172019-12-28
  • JAVA教程Java集合类中文介绍

    Java集合类中文介绍

    本文首先对Java集合类框架做了简单说明,之后对主要类和为API做了介绍:Collection、List、Set、AbstractCollection、AbstractList、AbstractSet、Iterator、ListIterator。 ...

    java教程网5182019-10-18