zoukankan      html  css  js  c++  java
  • JAVA测试装饰者模式

     1 package shb.java.demo;
     2 /**
     3  * 测试装饰者模式
     4  * @package :shb.java.demoJava02
     5  * @author shaobn
     6  * @Describe :
     7  * @Time: 2015-9-9 上午12:17:00
     8  */
     9 public class TestDecrator {
    10 
    11     /**
    12      * @author shaobn
    13      * @Describe :
    14      * @param args
    15      * @Time : 2015-9-9 上午12:16:49
    16      */
    17     public static void main(String[] args) {
    18         // TODO Auto-generated method stub
    19         CampusActivity ca = new AdvancedAct(new CampusInnerAct());
    20         ca.play();
    21         CampusActivity ca_2 = new AdvancedAct(new CampusOuterAct());
    22         ca_2.play();
    23     }
    24 
    25 }
    26 interface CampusActivity{
    27     
    28     void play();
    29 }
    30 class CampusInnerAct implements CampusActivity{
    31     public void play(){
    32         System.out.println("和小伙伴去打篮球");
    33     }
    34 }
    35 class CampusOuterAct implements CampusActivity{
    36     public void play(){
    37         System.out.println("和小伙伴去市中心逛街");
    38     }
    39 }
    40 class Campus__ implements CampusActivity{
    41     public void play(){
    42         
    43     }
    44 }
    45 class AdvancedAct implements CampusActivity{
    46     private CampusActivity ca;
    47     public AdvancedAct(CampusActivity ca){
    48         this.ca = ca;
    49     }
    50     public void play(){
    51         ca.play();
    52         System.out.println("骑着电动车去打排球,开着汽车去参加唱歌");
    53     }
    54     
    55 }
     1 package shb.java.demo;
     2 /**
     3  * 测试装饰者模式
     4  * @package :shb.java.demoJava02
     5  * @author shaobn
     6  * @Describe :
     7  * @Time: 2015-9-9 上午12:17:00
     8  */
     9 public class TestDecrator_2 {
    10 
    11     /**
    12      * @author shaobn
    13      * @Describe :
    14      * @param args
    15      * @Time : 2015-9-9 上午12:16:49
    16      */
    17     public static void main(String[] args) {
    18         // TODO Auto-generated method stub
    19         AdCampusInnerAct acia = new AdCampusInnerAct();
    20         acia.play();
    21         AdCampusOuterAct acoa = new AdCampusOuterAct();
    22         acoa.play();
    23     }
    24 
    25 }
    26 interface CampusActivity{
    27     
    28     void play();
    29 }
    30 class CampusInnerAct implements CampusActivity{
    31     public void play(){
    32         System.out.println("和小伙伴去打篮球");
    33     }
    34 }
    35 class AdCampusInnerAct extends CampusInnerAct{
    36     public void play(){
    37         super.play();
    38         System.out.println("骑着电动车和小伙伴去打排球");
    39     }    
    40 }
    41 class CampusOuterAct implements CampusActivity{
    42     public void play(){
    43         System.out.println("和小伙伴去市中心逛街");
    44     }
    45 }
    46 class AdCampusOuterAct extends CampusOuterAct{
    47     public void play(){
    48         super.play();
    49         System.out.println("开着汽车出去唱歌");
    50     }
    51 }
    52 class Campus__{
    53     public void play(){
    54         
    55     }
    56 }
    57 class AdCampus__ extends Campus__{
    58     public void play(){
    59         //增强功能......
    60     }
    61 }

    第一段为使用装饰者模式,第二段为使用继承。

    其实我们从两段代码可以看出,我们的目的是想让原有的功能增强,所以才衍生出更加丰富的方法,因此我们自然会想到继承。同时有一个问题也随之出现,当我们使用继承的时候,发现需要增加的类变得很多时,我们都需要重新写一个类去继承父类,从而重写方法。这样会增加很大的负担,而且耦合性很高,不易于程序的扩展。随之而来,装饰者模式到来。我们只需定义一个接口的子类,然后拿到同一个接口的引用,继而去增强属于该接口引用下的子类对象的方法即可。

    两段代码比对,比较明显看出优劣。

    如有错误,希望大家纠正。

    不早了,睡觉了。。。。

    2015-09-09

    吾宁做一叶扁舟,始航于湖边,遨游于海上,浪迹于江中。
  • 相关阅读:
    go相关
    mac下使用vscode技巧
    mac下secureCRT的使用技巧
    python subprocess实时输出
    python中多级目录导入模块问题
    python的print与sys.stdout
    python中类相关笔记
    python中sys.stdout.flush()的作用
    nginx+uwsgi配置
    虚拟机的 基本配置
  • 原文地址:https://www.cnblogs.com/assassin666/p/4793457.html
Copyright © 2011-2022 走看看