文档章节

Android小白的探索:2D绘图之Android简易版Microsoft Visio学习之路 三、装饰者模式

z
 zhenghaoLi
发布于 2017/09/10 18:14
字数 648
阅读 18
收藏 0

    在Microsoft Visio中点击一个图像,会在这个图像边缘出现一个方形的框,现在来实现这个框。

写之前强烈推荐一下别人写的博客,简单明了http://blog.csdn.net/jason0539/article/details/22713711

    当我们想要对一个类或多个类的功能进行扩充,通常就在这个类或父类中做改变,装饰着模式,就是在不改变原有类的功能属性的情况下,对这个类进行动态的扩展,而这个类什么也不用管,只需用自己做自己的就好了。

    装饰着模式,很重要的一点就是,装饰者类与被装饰者类要实现共同的接口。装饰者类,面向的不是对类,而是接口,通过对接口的操作,来实现对类的扩展。

    被装饰的类的接口

public interface DataInterface {
    public void addChild(DataInterface baseData);
    public void removeChild(int index);
    public void move(float moveX ,float moveY);
    public void draw(Canvas canvas);
    public List<DataInterface> getChild();
    public DataType[] pointIsInside(float moveX , float moveY);
    public void writer(BufferedWriter bufferedWriter);
    public DataInterface read(BufferedReader bufferedReader);
    public float[] getMaxMinXY(boolean checkOrRadio);
}

这个接口中,与我上一篇博客,最大的不同,是,传入的参数不再是一个父类,而是一个接口,凡是实现这个接口的类都能传入

    装饰者类的接口

public interface DecorationModeInterface extends DataInterface {
}

装饰者类有自己扩展这个类的接口:

private boolean aBoolean ;
private float[] floats;
private DataInterface dataInterface;
public DecorationMode(DataInterface dataInterface){
    this.dataInterface = dataInterface;
}

@Override
public void addChild(DataInterface baseData) {
    this.dataInterface.addChild(baseData);
}

@Override
public void removeChild(int index) {
    this.dataInterface.removeChild(index);
}

@Override
public void move(float moveX, float moveY) {
    this.dataInterface.move(moveX , moveY);
}

@Override
public void draw(Canvas canvas) {
    this.dataInterface.draw(canvas);

    if (isaBoolean()) {
        drawRectangle(getFloats(), canvas);
        setaBoolean(false);
    }
}

@Override
public List<DataInterface> getChild() {
    return this.dataInterface.getChild();
}

@Override
public DataType[] pointIsInside(float moveX, float moveY) {
    return this.dataInterface.pointIsInside(moveX,moveY);
}

@Override
public void writer(BufferedWriter bufferedWriter) {
    this.dataInterface.writer(bufferedWriter);
}

@Override
public DataInterface read(BufferedReader bufferedReader) {
    return this.dataInterface.read(bufferedReader);
}

@Override
public float[] getMaxMinXY(boolean checkOrRadio) {

    float[] floats = this.dataInterface.getMaxMinXY(checkOrRadio);
    float[] floats1 = {floats[0] - 10 ,floats[1] - 10 ,floats[2] + 10,floats[3] + 10};
    setFloats(floats1);
    setaBoolean(checkOrRadio);

    return getFloats();
}

public boolean isaBoolean() {
    return aBoolean;
}

public void setaBoolean(boolean aBoolean) {
    this.aBoolean = aBoolean;
}

public float[] getFloats() {
    return floats;
}

public void setFloats(float[] floats) {
    this.floats = floats;
}

//float left, float top, float right, float bottom
private RectangleData rectangleData = new RectangleData();
void drawRectangle(float[] floats ,Canvas canvas){
    rectangleData.setRectF(new RectF(floats[0] , floats[1],floats[2],floats[3]));
    rectangleData.setPaintAlpha(100);
    rectangleData.setPaintStyle(Paint.Style.STROKE);
    rectangleData.setPaintColor(Color.RED);
    rectangleData.setWight(10);
    rectangleData.draw(canvas);
}

drawRectangle:为需要画框出来的类,画出来。

    装饰者类,其实就是在 所有需要被装饰的类的外面,嵌套一层 装饰者类,用装饰着类去包裹住被装饰者,调用装饰者,在装饰着中执行扩展的方法,然后执行原有的方法。实现对类的扩展

 

© 著作权归作者所有

共有 人打赏支持
z
粉丝 7
博文 6
码字总数 7900
作品 0
眉山
支持常用的图表、仪表和地图类型的图表控件TeeChart Java for Android

TeeChart Java for Android控件是针对Google的Android操作系统设计的图表控件,支持常用的图表、仪表和地图类型 具体功能: 默认支持Android v2.1以及更高的多点触摸版 提供了50多种图表样式...

baobiaokongjian
2014/06/21
0
1
Design Patterns in Android:装饰模式

装饰模式是干嘛的呢?它在项目中有哪些用途呢?装饰模式在Android源码中有哪些应用呢?本文将和读者朋友一起分享探讨装饰者模式在Android中的应用和实践。 转载请注明出处。 装饰模式定义 装...

MichaelX
06/13
0
0
android自学笔记《三》——系统架构分析

下面是Android的系统架构图 翻译后 从上图中可以看出,Android系统架构为4层结构,从上层到下层分别是应用程序层、应用程序框架层、系统运行库层以及Linux内核层,分别介绍如下: 1)应用程序...

郭子
2012/02/03
0
5
Android--面试中遇到的问题总结(三)

《Android 开发工程师面试指南 LearningNotes 》,作者是陶程,由梁观全贡献部分。大家可以去知乎关注这两位用心的少年。这份指南包含了大部分Android开发的基础、进阶知识,不仅可以帮助准备...

sealin
2017/02/22
0
0
Android 网络编程 目录

Android 网络编程 目录 Android 网络编程1 Http协议 to be continued... Android 架构师之路 目录 Android 架构师之路1 UML图之用例图 Android 架构师之路2 UML图之类图 Android 架构师之路3...

香沙小熊
06/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Mac OS X下Maven的安装与配置

Mac OS X 安装Maven: 下载 Maven, 并解压到某个目录。例如/Users/robbie/apache-maven-3.3.3 打开Terminal,输入以下命令,设置Maven classpath $ vi ~/.bash_profile 添加下列两行代码,之后...

TonyStarkSir
今天
3
0
关于编程,你的练习是不是有效的?

最近由于工作及Solution项目的影响,我在重新学习DDD和领域建模的一些知识。然后,我突然就想到了这个问题,以及我是怎么做的? 对于我来说,提升技能的项目会有四种: 纯兴趣驱动的项目。即...

问题终结者
今天
4
0
打开eclipse出现an error has occurred see the log file

解决方法: 1,打开eclipse安装目录下的eclipse.ini文件; 2,打开的文本文件最后添加一行 --add-modules=ALL-SYSTEM 3,保存重新打开Eclipse。...

任梁荣
昨天
4
0
搞定Northwind示例数据库,无论哪个版本的SQLServer都受用

Northwind数据库 从这里可以找到突破口: http://social.msdn.microsoft.com/Forums/zh-CN/Vsexpressvb/thread/8490a1c6-9018-40c9-aafb-df9f79d29cde 下面是MSDN: http://msdn2.microsoft......

QQZZFT
昨天
1
0
mysql主从同步,安装配置操作

准备 两台mysql服务,我这里准备了如下: 主库:192.168.176.128 从库:192.168.176.131 如何在Linux上安装mysql服务,请看https://blog.csdn.net/qq_18860653/article/details/80250499 操作...

小致dad
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部