zoukankan      html  css  js  c++  java
  • 设计模式之——装饰者模式

    装饰者模式

    一、什么是装饰者?

    装饰者模式允许向现有的对象添加新的功能,同时不改变其结构。

    属于结构型模式。

    创建了一个装饰类,用来包装原有的类,并在保持方法签名完整性的前提下,提供了额外的功能。

    二、装饰者的介绍

    1. 意图:

    动态地给一个对象添加一些额外的职责。

    2. 主要解决:

    一般情况下,我们想扩展一个类经常使用继承的方式实现,由于继承为类引入了静态特征,并且随着扩展功能的增多,子类会膨胀。

    3. 何时使用:

    在不想增加很多子类的情况下扩展类

    4. 使用场景:

    (1) 扩展一个类的功能;(2) 动态增加功能,动态撤销。

    三、code display

    现在画图形,可以画两种图形:1. 圆形; 2. 正方形

    //接口类
    public interface Shape {
    	void draw();
    }
    
    //圆形
    public class Circle implements Shape{
    
    	@Override
    	public void draw() {
    		System.out.println("Shape: Circle");
    	}
    
    }
    
    //正方形
    public class Rectangle implements Shape {
    
    	@Override
    	public void draw() {
    		System.out.println("Shape: Rectangle " );
    	}
    
    }
    

    现要求,画出来的图形要能够边框要能够有颜色

    首先创建一个装饰者类:

    //装饰者类
    public abstract class ShapeDecorator implements Shape {
    	
    	public Shape decoratedShape;
    	
    	public ShapeDecorator(Shape decoratedShape){
    		this.decoratedShape = decoratedShape;
    	}
    	
    	//装饰者类调用接口方法
    	public void draw(){
    		decoratedShape.draw();
    	}
    }
    
    //红色装饰者子类
    public class RedShapeDecorator extends ShapeDecorator{
    
    	/**
    	 * @param decoratedShape
    	 */
    	public RedShapeDecorator(Shape decoratedShape) {
    		super(decoratedShape);
    	}
    
    	@Override
    	public void draw() {
    		decoratedShape.draw();
    		setRedBorder(decoratedShape);
    	}
    	
    	public void setRedBorder(Shape decoratedShape){
    		System.out.println(" Border Color: Red ");
    	}
    
    }
    
    
  • 相关阅读:
    C++并发与多线程学习笔记--unique_lock详解
    C++并发与多线程学习笔记--互斥量、用法、死锁概念
    MongoDB教程--配置与入门
    C++并发与多线程学习笔记--多线程数据共享问题
    C++并发与多线程学习笔记--参数传递详解
    C++并发与多线程学习笔记--基本概念和实现
    Python学习笔记--语音处理初步
    C#中三个关键字params,Ref,out
    Windows窗体应用开发3--配置标准控件1
    在博客的第一天
  • 原文地址:https://www.cnblogs.com/lfdingye/p/11630479.html
Copyright © 2011-2022 走看看