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

    吾宁做一叶扁舟,始航于湖边,遨游于海上,浪迹于江中。
  • 相关阅读:
    Linux下常用命令以及应用场景
    Java通过代理访问网络的几种方法
    Linux下模拟Http发送的Get和Post请求
    Postgresql常用函数整理
    java-日期Calendar类
    利用数组保存 6 个 Circle 对象,创建 Circle 对象时可传递半径,半 径值由 Math 类的 Random()方法产生( 10 以内,保持一位小数),分别求其面积 (四舍五入,保持两位小数)
    第十讲 Java 资源结构-api
    浅谈面向对象与女娲造人 (摘自 Nerxious)
    java-打印字母表
    java反射机制
  • 原文地址:https://www.cnblogs.com/assassin666/p/4793457.html
Copyright © 2011-2022 走看看