文档章节

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
Android 8款开源游戏引擎

1、Angle (2D Java) Angle是一款专为Android平台设计的,敏捷且适合快速开发的2D游戏引擎,基于OpenGLES技术开发。该引擎全部用Java代码编写,并且可以根据自己的需要替换里面的实现,缺陷...

鉴客
2012/03/09
174
0
Android 8款开源游戏引擎

1、Angle (2D Java) Angle是一款专为Android平台设计的,敏捷且适合快速开发的2D游戏引擎,基于OpenGLES技术开发。该引擎全部用Java代码编写,并且可以根据自己的需要替换里面的实现,缺陷...

晨曦之光
2012/03/01
1K
1
09、装饰模式--Decorator

PS:转载请注明出处 作者: TigerChain 地址: https://www.jianshu.com/p/f7ff52ae44a0 本文出自 TigerChain 简书 人人都会设计模式 教程简介 1、阅读对象 本篇教程适合新手阅读,老手直接略过...

TigerChain
2018/11/19
0
0
Android 8款开源游戏引擎

1、Angle (2D Java) Angle是一款专为Android平台设计的,敏捷且适合快速开发的2D游戏引擎,基于OpenGLES技术开发。该引擎全部用Java代码编写,并且可以根据自己的需要替换里面的实现,缺陷...

长平狐
2013/01/06
75
0

没有更多内容

加载失败,请刷新页面

加载更多

Intellij IDEA中设置了jsp页面,但是在访问页面时却提示404

在Intellij IDEA中设置了spring boot的jsp页面,但是在访问时,却出现404,Not Found,经过查找资料后解决,步骤如下: 在Run/Debug Configurations面板中设置该程序的Working Directory选项...

uknow8692
26分钟前
0
0
day24:文档第五行增内容|每月1号压缩/etc/目录|过滤文本重复次数多的10个单词|人员分组|

1、在文本文档1.txt里第五行下面增加如下内容;两个方法; # This is a test file.# Test insert line into this file. 分析:给文档后增加内容,可以用sed 来搞定;也可以用while do done...

芬野de博客
32分钟前
0
0
深入理解JVM—JVM内存模型

深入理解JVM—JVM内存模型 我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存...

onedotdot
50分钟前
1
0
MVC、MVCS、MVVM、MVP、VIPER等这么多架构模式哪一个好呢?

在项目开启阶段,其中一个很重要的环节就是选架构。 那么面对目前已知的这么多架构模式我们该怎么选择呢?这确实是个很让人头疼的问题! 下面我就在这里梳理一下目前常见的一些架构模式。 先...

Java干货分享
今天
4
0
简单模仿配置文件的反射机制

//Student类 public class Student { public void love() { System.out.println("python"); } } //Tesy类 public class Tesy { public static void main(String[] args) throws Exceptio......

南桥北木
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部