java设计模式之修饰

在IO流的学习中,我们使用到了装饰者的设计模式。现在就详细的学习一下java的装饰者设计模式。

Java的装饰者模式就是 java程序在运行时可以动态扩大一个类的功能。

它的原理是:增加一个修饰类包裹原来的类,包裹的方式一般是通过在将原来的对象作为修饰类的构造函数的参数。装饰类实现新的功能,但是,在不需要用到新功能的地方,它可以直接调用原来的类中的方法。修饰类必须和原来的类有相同的接口。

修饰模式是类继承的另外一种选择。类继承在编译时候增加行为,而装饰模式是在运行时增加行为。

当有几个相互独立的功能需要扩充时,这个区别就变得很重要。在有些面向对象的编程语言中,类不能在运行时被创建,通常在设计的时候也不能预测到有哪几种功能组合。这就意味着要为每一种组合创建一个新类。相反,修饰模式是面向运行时候的对象实例的,这样就可以在运行时根据需要进行组合。

按照常规的继承模式,加入有m和公司,n个工种。那么该系统就需要m*n个子类,当m和n很大的时候,子类的数量也变得很大了。利用装饰者模式,可以减少定义的子类。


建立以下包结构



1:首先建立一个Worke 接口,所有的工人都继承与该接口。

public interface Worker {

    public void doSomeWork();

}

2:建立程序员类和美工类

public class Coder implements Worker{

    @Override

    public void doSomeWork() {

       // TODO Auto-generatedmethod stub

       System.out.println("我是程序员!!");

    }

 

}

 

//美工类

public class MeiGong implements Worker{

 

    @Override

    public void doSomeWork() {

       // TODO Auto-generatedmethod stub

       System.out.println("我是美工!!");

    }

 

}

A公司的修饰类

public class Aworker implements Worker{

    private Workerworker;

    public Aworker(Worker worker){

       this.worker = worker;

    }

   

    @Override

    public void doSomeWork() {

       // TODO Auto-generatedmethod stub

       System.out.println("我是A公司的");

       worker.doSomeWork();

    }

 

}

B公司的修饰类

public class BWorker implements Worker {

    private Workerworker;

 

    public BWorker(Worker worker) {

       this.worker = worker;

    }

 

    @Override

    public void doSomeWork() {

       // TODO Auto-generatedmethod stub

       System.out.println("我是b公司的");

       worker.doSomeWork();

    }

}

 

主函数:

public class Test {

    public static void main(String[] args) {

       //生成一个A公司的程序员对象

       //可以先生成一个程序员对象。在生成AWorker对象。

       Coder coder new Coder();

       Aworker aworker = new Aworker(coder);

       aworker.doSomeWork();

    }

}

运行结果:

我是A公司的

我是程序员!!

这样就可以实现对一个类的动态修饰。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值