zoukankan      html  css  js  c++  java
  • Java设计模式---装饰模式(Decorator)

    1.  装饰模式(Decorator Pattern)定义:

         动态地给一个对象添加额外的职责(功能)。相比生成子类,装饰模式更加灵活。

    2.  装饰模式中的角色说明:

         Component抽象角色: Component是一个接口或者抽象类,是我们最原始的对象

         ConcreteCompont具体角色: ConcreteCompont是继承或者实现了Component的类,也是我们需要装饰的类

         Decorator抽象装饰角色:抽象装饰者类,继承或者实现了Component,并且有一个私有的Component对象

         DecoratorOne具体装饰角色:继承了Decorator,一般在这个类为原始对象扩展功能

    3.  实现示例代码:

     Component接口: 

    public interface Component {
        
    	public void operator();
    	
    }
    ConcreteCompont类:

    public class ConcreteComponent implements Component {
    
    	@Override
    	public void operator() {
    		
    		System.out.println("我是需要被装饰的操作方法....");
    
    	}
    
    }
    抽象装饰者Decorator类:

    public abstract class Decorator implements Component{
        
    	private Component component;
    	
    	//通过构造函数传递被装饰者
    	public Decorator(Component component) {
    		super();
    		this.component = component;
    	}
    	
    	@Override
    	public void operator() {
    		this.component.operator();	
    	}
    	 
    }
    具体装饰者类:

    public class DecoratorOne extends Decorator {
        
    	//定义被装饰者
    	public DecoratorOne(Component component) {
    		super(component);
    	}
    	
    	//重写父类的操作方法 
        @Override
        public void operator() {
        	this.decorator_one();
        	super.operator();
        }
        
        //定义装饰方法
        private void  decorator_one(){
        	System.out.println("来自一号装饰者的装饰处理");
        }
    
    }
    public class DecoratorTwo extends Decorator {
        
    	//定义被装饰者
    	public DecoratorTwo(Component component) {
    		super(component);
    	}
    	
    	//重写父类的操作方法 
        @Override
        public void operator() {
        	super.operator();
        	this.decorator_two();
        }
        
        //定义装饰方法
        private void  decorator_two(){
        	System.out.println("来自二号装饰者的装饰处理");
        }
    
    }
    装饰测试类:

    public class Test {
       
    	public static void main(String[] args) {
    		
    		 Component component=new ConcreteComponent();
    		 //第一次装饰
    		 component=new DecoratorOne(component);
    		 //第二次装饰
    		 component=new DecoratorTwo(component);
    		 //装饰之后调用
    		 component.operator();
    		
    	}
    }
    输出结果:

    来自一号装饰者的装饰
    我是需要被装饰的操作方法....
    来自二号装饰者的装饰
    
    4.  装饰模式的使用场景

       1.需要扩展一个类的功能或者给一个类增加附加功能

       2.需要动态的为一个对象增加功能,这些功能可以动态的撤销







  • 相关阅读:
    c++重点笔记2
    c++学习笔记重点1
    创业思路(3) 传统行业与互联网思维
    创业思路(2) 社交
    创业思路(1)
    Asp.Net实现Http长连接推送
    又回来了
    2021.10.23软件更新公告
    2021.10.22软件更新公告
    SharePoint 2013 新特性 (三) 破改式 —— 设计管理器的使用 [2.HTML变身模板页]
  • 原文地址:https://www.cnblogs.com/elgin-seth/p/5293768.html
Copyright © 2011-2022 走看看