你的位置:首页 > 软件开发 > Java > 结构型设计模式

结构型设计模式

发布时间:2015-08-05 14:00:19
结构型设计模式概述 结构型设计模式用于处理类或对象之间的组合,即描述类和对象之间怎样组织起来形成大的结构,从而实现新的功能。实现的机制:结构型对象模式采用组合/聚合机制来组合类,包括桥梁模式(Bridge)、组合模式(Composite)、装饰器模式(Decorator)、外 ...

结构型设计模式概述 

结构型设计模式用于处理类或对象之间的组合,即描述类和对象之间怎样组织起来形成大的结构,从而实现新的功能。

实现的机制:

结构型对象模式采用组合/聚合机制来组合类,包括桥梁模式(Bridge)、组合模式(Composite)、装饰器模式(Decorator)、外观模式(Facade)、享元模式(FlyWeight)、代理模式(Proxy)。

结构型类模型采用继承机制来组合类,包括适配器模式(Adapter)。


 

(一)外观(Facade)模式(门面模式) 

问题提出:

在软件系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,而导致客户程序随着子系统的变化而变化。那么,如何简化客户程序与子系统之间的交互接口?如何将复杂系统的内部子系统与客户程序之间的依赖解耦?

(一)外观(Facade)模式 

public class Class1 {

public void method1(){

….

}

}

public class Class2 {

public void method2(){

….

}

}

public class Class3 {

public void method3(){

….

}

}

public class Class4 {

public void method4(){

….

}

}  

假如客户程序要使用Class1、Class2、Class4完成一项业务功能,使用Class3、Class1完成另一项业务功能。

public class ClientNoFacade {

public void methodA() {//完成第一项业务功能

Class1 c1 = new Class1();

c1.method1();

Class2 c2 = new Class2();

c2.method2();

Class4 c4 = new Class4();

c4.method4();

}

public void methodB() {//完成第二项业务功能

Class3 c3 = new Class3();

c3.method3();

Class1 c1 = new Class1();

c1.method1(); }

}


 

(二)装饰器(Decorator)模式 

问题提出:在软件系统中,有时候我们会使用继承来扩展对象的功能,但是由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀。如何使“对象功能的扩展”能够根据需要来动态地实现?同时避免“扩展功能的增多”带来的子类膨胀问题?

考虑场景:

星巴克的分店几乎开遍世界各地。它们提供了各式各样的美味咖啡:爱尔兰咖啡、蓝山咖啡、卡布基诺、雀巢。每样咖啡都有自己的描述属性和收费行为。另外它们还提供各种配料:奶、砂糖、冰块、豆浆。不同的咖啡加入不同的配料计算的价格是不一样的。

如何设计?

用继承的方式实现简直是垃圾。

我们换一种思路:

现在用户点了一杯爱尔兰双倍牛奶咖啡,我们要做的是:

创建一个爱尔兰咖啡对象

用奶装饰它

再用奶装饰它

调用cost()方法,并依赖委托将配料的价格计算进去

代码实现:

//咖啡接口

package com.lovo.decoretor;

public interface Coffee {

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:结构型设计模式

关键词:设计模式

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。