码迷,mamicode.com
首页 > Windows程序 > 详细

装饰者模式-轻松记住IO类的关系与API

时间:2017-03-12 19:52:07      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:代码   活动   wal   protected   tco   cti   paper   pap   客户端   

一、目录

技术分享

二、概述与模型

1、概述

  含义:控制对对象的访问。

  作用:详细控制某个(某类)某对象的方法,在调用之前做前置处理,调用之后做后置处理,从而实现将统一流程代码放在代理类中处理。

  优点:

  缺点:

2、模型

  技术分享

 

  Component(抽象组件):定义代理角色和真实角色的公共对外方法。

  ConcreteComponent(真实组件):实现抽象角色,定义真实角色所要实现的真实业务逻辑,供代理角色调用。

  Decorator(抽象装饰者):实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。

  ConcreteDecorator(真实装饰者):

  最终目标:将统一的流程控制放到代理角色处理。

三、应用场景描述

  1、安全代理:屏蔽对真实角色的直接访问,由代理角色控制,等业务真实需要的时候,才由代理对象调用真实对象方法。

  2、远程代理:通过代理类处理远程方法调用(RMI)。

  3、延迟代理:先加载轻量级的代理对象,真正需要再加载真实对象。例如加载图片、视频,先由代理对象在后台开启流对象,待真正需要浏览图片、视频的时候,才由真实对象加载图片,最后由代理对象关闭流对象。

  4、事务:解决概述举例内容,一层不变的内容由代理对象承担,而真正的业务逻辑由真实对象的方法实现。

  5、真实系统的日志处理、JDBC事务、Connection的开启与关闭。

  代码演示场景描述:假设一个明星被邀请去拍广告、拍电影,那么务必有这些流程:面谈->起草合同->安排机票、车票->出席活动->结算尾款。假设一年拍一两次广告,那么完全由一个明星自己解决。事实上,每个明星都有经纪人,而明星只专心负责出席活动,其他事务由经纪人操作。

  技术分享

 

四、代码演示

1、抽象组件

public abstract class Component {
    public abstract  void display();
}

 

2、真实组件

public class ConcreteComponent extends Component{
    public void display() {
        System.out.println("我是一块泥土墙!");
    }
}

 

3、抽象装饰者

public class Decorator extends Component{
    protected Component component;

    public Decorator(Component component) {
        this.component = component;
    }

    public Component getComponent() {
        return component;
    }

    public void setComponent(Component component) {
        this.component = component;
    }


    public void display() {
        component.display();
    }
}

 

4、真实装饰者

//装饰者A:泥土墙
public
class ConcreteDecoratorA extends Decorator { public ConcreteDecoratorA(Component component) { super(component); } @Override public void display() { this.component.display(); System.out.println("在泥土墙上加上水泥!"); } }

 

//装饰者B:带墙纸的墙
public
class ConcreteDecoratorB extends Decorator { public ConcreteDecoratorB(Component component) { super(component); } @Override public void display() { this.component.display(); System.out.println("在墙皮上添加墙纸"); } }

5、客户端

public class Client {
    public static void main(String [] args){
        //新建一面泥土墙:原始组件对象
        Component wall=new ConcreteComponent();

        //装饰者A:为泥土墙添加水泥
        ConcreteDecoratorA cementWall=new ConcreteDecoratorA(wall);
        cementWall.display();
        System.out.println("-----------分割线-------------");
        //装饰B:为泥土墙添加墙纸
        ConcreteDecoratorB paperWall=new ConcreteDecoratorB(wall);
        paperWall.display();
        System.out.println("-----------分割线-------------");

        //装饰者B:为水泥墙(装饰者A)添加墙纸
        ConcreteDecoratorB mixedWall=new ConcreteDecoratorB(cementWall);
        mixedWall.display();
    }
}

 

6、测试结果

技术分享

 

装饰者模式-轻松记住IO类的关系与API

标签:代码   活动   wal   protected   tco   cti   paper   pap   客户端   

原文地址:http://www.cnblogs.com/qiuyong/p/6538856.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!