源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Java设计模式之装饰者模式详解和代码实例

  • 时间:2020-07-08 04:25 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Java设计模式之装饰者模式详解和代码实例
装饰者模式可以给已经存在的对象动态的添加能力。下面,我将会用一个简单的例子来演示一下如何在程序当中使用装饰者模式。 [b]1.装饰者模式[/b] 让我们来假设一下,你正在寻找一个女朋友。有很多来自不同国家的女孩,比如:美国,中国,日本,法国等等,他们每个人都有不一样的个性和兴趣爱好,如果需要在程序当中模拟这么一种情况的话,假设每一个女孩就是一个Java类的话,那么就会有成千上万的类,这样子就会造成类的膨胀,而且这样的设计的可扩展性会比较差。因为如果我们需要一个新的女孩,就需要创建一个新的Java类,这实际上也违背了在程序开发当中需要遵循的OCP(对扩展开放,对修改关闭)原则。 让我们来重新做另外一种设计,让每一种个性或者兴趣爱好成为一种装饰从而可以动态地添加到每一个女孩的身上。 [b]2.类图结构[/b] [img]http://files.jb51.net/file_images/article/201409/2014919100403940.jpeg?201481910413[/img] [b]3.装饰者模式示例代码[/b] [b]Girl.java[/b]
[u]复制代码[/u] 代码如下:
public abstract class Girl {  String description = "no particular";  public String getDescription(){   return description;  } }
[b]AmericanGirl.java[/b]
[u]复制代码[/u] 代码如下:
public class AmericanGirl extends Girl {  public AmericanGirl() {   description = "+American";  } }
[b]EuropeanGirl.java[/b]
[u]复制代码[/u] 代码如下:
public class EuropeanGirl extends Girl {  public EuropeanGirl(){   description = "+European";  } }
[b]GirlDecorator.java[/b]
[u]复制代码[/u] 代码如下:
public abstract class GirlDecorator extends Girl {  public abstract String getDescription(); }
[b]Science.java[/b]
[u]复制代码[/u] 代码如下:
public class Science extends GirlDecorator {  private Girl girl;  public Science(Girl girl){   this.girl = girl;  }  @Override  public String getDescription() {   return this.girl.getDescription() + "+Like Science";  }  public void caltulateStuff() {   System.out.println("scientific calculation!");  } }
[b]Art.java[/b]
[u]复制代码[/u] 代码如下:
public class Art extends GirlDecorator {  private Girl girl;  public Art(Girl girl){   this.girl = girl;  }  @Override  public String getDescription() {   return this.girl.getDescription() + "+Like Art";  }  public void draw() {   System.out.println("draw pictures!");  } }
[b]Main.java[/b]
[u]复制代码[/u] 代码如下:
public class Main {  public static void main(String[] args) {   //普通美国女孩   Girl g1 = new AmericanGirl();   System.out.println(g1.getDescription());   //喜欢科学的   Science g2 = new Science(g1);   System.out.println(g2.getDescription());   //喜欢艺术的   Art g3 = new Art(g2);   System.out.println(g3.getDescription());  } }
[b]4.装饰者模式在JDK中的运用[/b] Java当中的IO是运用了装饰者模式的最典型的例子。 下面是一个简单的例子,通过BufferedReader对象来装饰InputStreamReader对象:
[u]复制代码[/u] 代码如下:
BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); //System.in is an InputStream object
(全文完)
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部