您的位置:首页 > 其它

利用装饰器模式封装核心业务单元

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;
}
}
可以说,这是在用户不知晓的情况下,也不更改原来的类的情况下,改变了性能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: