Decorator模式中遭遇继承与聚合

好事多磨9999

好事多磨9999

2016-01-29 12:58

Decorator模式中遭遇继承与聚合,Decorator模式中遭遇继承与聚合
  一:背景:Decorator

  *Decorator 常被翻译成"装饰",我觉得翻译成"油漆工"更形象点,油漆工(decorator)是用来刷油漆的,那么被刷油漆的对象我们称decoratee.这两种实体在Decorator 模式中是必须的。

  *Decorator 定义:

  动态给一个对象添加一些额外的职责,就象在墙上刷油漆.使用Decorator 模式相比用生成子类方式达到功能的扩充显得更为灵活。

  *为什么使用Decorator?

  我们通常可以使用继承来实现功能的拓展,如果这些需要拓展的功能的种类很繁多,那么势必生成很多子类,增加系统的复杂性,同时,使用继承实现功能拓展,我们必须可预见这些拓展功能,这些功能是编译时就确定了,是静态的。

  使用Decorator 的理由是:这些功能需要由用户动态决定加入的方式和时机.Decorator 提供了"即插即用"的方法,在运行期间决定何时增加何种功能。

  *对于该模式,初步归纳为

  1.基本功能为接口

  2.Decorator参数为接口本身也为接口以便为下一个Decorator的参数

  3.基本功能类实现接口 并作为Decorator构造函数的参数,以便在此基础上添加新功能

  4.额外功能由Decorator中的数据结构处理
  
  二:问题

  这是一段Decorator设计模式的实现例子如下:

  基本功能:Counter类
  需要添加的功能

  1:上限控制

  2:下限控制

  import java.io.*;
  class Counter{
  private int value;
  public Counter(int v){
  System.out.println("init me here in The Counter with value!");
  value=v;
  }

  public Counter(Counter cc){
  System.out.println("init me here in The Counter with class!");
  value=cc.value;
  }

  public int read_value(){
  System.out.println("read me here The value is:"+value);
  System.out.println("read me here in The Counter!");

  return value;
  }

  public void increment(){
  System.out.println("increment me here in The Counter !");
  value++;
  }

  public void decrement(){
  System.out.println("decrement me here in The Counter !");
  value--;
  }
  }

  class Decorator extends Counter
  {
  Counter counter;
  public Decorator(Counter c)
  {
  super(c);
  System.out.println("init me here with class Decorator!");
  } 
  }

  class UpperLimit extends Decorator//上限控制
  {
  public UpperLimit(Counter c)
  {
  super(c);
  counter=c;
  System.out.println("init me here with class UpperLimit!");
  }
  public void increment()
  {
  if(counter.read_value()20)
  {
   System.out.println("Too High");
  }
  else
  {
   System.out.println("increment me here with class UpperLimit!");
   counter.increment();
  }
  }
  /*public void decrement()
  {
  counter.decrement();
  }
  public int read_value()
  {
  return counter.read_value();
  }*/

  }

  class LowerLimit extends Decorator//下限控制
  {
  public LowerLimit(Counter c)
  {
  super(c);
  counter=c;
  System.out.println("init me here in The Counter with class LowerLimit!");
  }
  public void decrement()
  {
  System.out.println("Class value :"+read_value());
  System.out.println("Dec value :"+counter.read_value());
  if(counter.read_value()<=0)
  {
   System.out.println(counter.read_value());
   System.out.println("Too Low");
  }
  else
  {
   System.out.println("decrement me here in The Counter with class LowerLimit!");
   counter.decrement();
  }
  }
  /*public void increment()
  {
  counter.increment();
  }
  public int read_value()
  {
  return counter.read_value();
  }*/
  }

  class CounterFactory
  {
  public static Counter crea
展开更多 77%)
分享
qqQQ
qzoneQQ空间
weibo微博

猜你喜欢

Decorator模式中遭遇继承与聚合

Java JAVA基础
Decorator模式中遭遇继承与聚合

Decorator模式中遭遇继承与聚合的冲突

编程语言 网络编程
Decorator模式中遭遇继承与聚合的冲突

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Java IO 包中的Decorator模式

编程语言 网络编程
Java IO 包中的Decorator模式

谈谈J2SE中当序列化遭遇继承

Java JAVA基础
谈谈J2SE中当序列化遭遇继承

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

无废话C#设计模式之十三:Decorator

编程语言 网络编程
无废话C#设计模式之十三:Decorator

实例解析C++/CLI中的继承与枚举

编程语言 网络编程
实例解析C++/CLI中的继承与枚举

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

XSL、XML教程-DVBBS皮肤制作 最基本的语法

XSL、XML教程-DVBBS皮肤制作 最基本的语法

请教一个小问题 - PHPchina

请教一个小问题 - PHPchina
下拉加载更多内容 ↓