利用装饰器模式封装核心业务单元
2009-02-13 23:07
351 查看
有的时候,希望实现一个基本的核心代码快,由外围代码实现专用性能的包装,最简单
的方法,是使用超类,但是超类使用了继承而提升了耦合性。在这样的情况下,也可以使用
装饰器模式,这是用组合取代继承的一个很好的方式。
1、意图
事实上,上面所要解决的意图可以归结为“在不改变对象的前提下,动态增加它的功能”,
也就是说,我们不希望改变原有的类,或者采用创建子类的方式来增加功能,在这种情况下,
可以采用装饰模式。
2、结构
装饰器结构的一个重要的特点是,它继承于一个抽象类,但它又使用这个抽象类的聚合
(即即装饰类对象可以包含抽象类对象),恰当的设计,可以达到我们提出来的目的。
假定我们已经构造了一个基于支付的简单工厂模式的系统。现在需要每个类在调用方法
goSale()的时候,除了完成原来的功能以外,先弹出一个对话框,显示工厂的名称,而且不需
要改变来的系统,为此,在工厂类的模块种添加一个装饰类 Decorator,同时略微的改写一
下工厂类的代码。
//装饰类
public class Decorator extends Payment{
private String strName;
public Decorator(String strName){
this.strName = strName;
}
private Payment pm;
public void setPm(Payment value){
pm = value;
}
public String Action(){
//在执行原来的代码之前,显示提示框
System.out.println(strName);
return pm.Action();
}
}
而工厂类:
//这是一个工厂类
public class Factory{
public static Payment PaymentFactory(String PaymentName){
Payment mdb=null;
if (PaymentName.equals("现金"))
mdb=new CashPayment();
else if (PaymentName.equals("信用卡"))
mdb=new CreditPayment();
else if (PaymentName.equals("支票"))
mdb=new CheckPayment();
//return mdb;
Decorator m=new Decorator(PaymentName);
m.setPm(mdb);
return m;
}
}
可以说,这是在用户不知晓的情况下,也不更改原来的类的情况下,改变了性能。
的方法,是使用超类,但是超类使用了继承而提升了耦合性。在这样的情况下,也可以使用
装饰器模式,这是用组合取代继承的一个很好的方式。
1、意图
事实上,上面所要解决的意图可以归结为“在不改变对象的前提下,动态增加它的功能”,
也就是说,我们不希望改变原有的类,或者采用创建子类的方式来增加功能,在这种情况下,
可以采用装饰模式。
2、结构
装饰器结构的一个重要的特点是,它继承于一个抽象类,但它又使用这个抽象类的聚合
(即即装饰类对象可以包含抽象类对象),恰当的设计,可以达到我们提出来的目的。
假定我们已经构造了一个基于支付的简单工厂模式的系统。现在需要每个类在调用方法
goSale()的时候,除了完成原来的功能以外,先弹出一个对话框,显示工厂的名称,而且不需
要改变来的系统,为此,在工厂类的模块种添加一个装饰类 Decorator,同时略微的改写一
下工厂类的代码。
//装饰类
public class Decorator extends Payment{
private String strName;
public Decorator(String strName){
this.strName = strName;
}
private Payment pm;
public void setPm(Payment value){
pm = value;
}
public String Action(){
//在执行原来的代码之前,显示提示框
System.out.println(strName);
return pm.Action();
}
}
而工厂类:
//这是一个工厂类
public class Factory{
public static Payment PaymentFactory(String PaymentName){
Payment mdb=null;
if (PaymentName.equals("现金"))
mdb=new CashPayment();
else if (PaymentName.equals("信用卡"))
mdb=new CreditPayment();
else if (PaymentName.equals("支票"))
mdb=new CheckPayment();
//return mdb;
Decorator m=new Decorator(PaymentName);
m.setPm(mdb);
return m;
}
}
可以说,这是在用户不知晓的情况下,也不更改原来的类的情况下,改变了性能。
相关文章推荐
- 利用桥接模式封装业务单元变化
- 利用观察者模式处理业务单元的变化
- 利用模板方法封装业务单元变化
- 利用外观模式封装类的变化
- 减少存储过程封装业务逻辑-web开发与传统软件开发的思维模式不同
- 利用装饰者模式通过层层封装以达到动态增强类的功能。
- 设计技巧11:静态创建方法(非设计模式中的工厂方法) 利用一个静态的方法封装构建器
- 大数据架构和模式(五):利用大数据识别保险行业中的欺诈业务案例
- 数据让生意更简单,网聚宝创业团队利用数加快速打造核心业务竞争力,在激烈的市场竞争中弯道超车。
- 基于业务单元的开发与部署模式
- 减少存储过程封装业务逻辑-web开发与传统软件开发的思维模式不同
- 减少存储过程封装业务逻辑-web开发与传统软件开发的思维模式不同
- 减少存储过程封装业务逻辑-web开发与传统软件开发的思维模式不同
- 利用模板模式封装APP版本更新模块
- Struts核心业务之请求数据的自动封装
- 减少存储过程封装业务逻辑-web开发与传统软件开发的思维模式不同
- 设计模式 业务封装 & 紧耦合 vs. 松耦合 & 简单工厂模式
- Android 封装自定义无限轮播banner之体验装饰模式
- 基于业务单元的开发与部署模式
- 封装:实现单例、多例模式,业务层继承调用