• 设计模式(五) 装饰者模式


    定义

    装饰( Decorator )模式又叫做包装模式。通过一种对客户端透明的方式来扩展对象的功能,是继承关系的一个替换方案。

    装饰者模式的结构

    装饰模式的角色和职责

    • 抽象组件角色: 一个抽象接口,是被装饰类和装饰类的父接口(Car)。

        public interface Car {
        
        	void run();
        
        	void show();
        
        }
      
    • 具体组件角色:为抽象组件的实现类(FlyCar、SwinCarDecorator)。

        public class FlyCarDecorator extends CarDecorator {
        
        	public FlyCarDecorator(Car car) {
        		super(car);
        
        	}
        
        	@Override
        	public void run() {
        
        	}
        
        	private void fly() {
        		System.out.println("可以飞的车");
        	}
        
        	@Override
        	public void show() {
        		this.getCar().show();
        		fly();
        	}
        
        }
      
        public class SwimCarDecorator extends CarDecorator {
        
        	public SwimCarDecorator(Car car) {
        		super(car);
        	}
        
        	private void swim() {
        		System.out.println("可以游的车");
        	}
        
        	@Override
        	public void run() {
        
        	}
        
        	@Override
        	public void show() {
        		this.getCar().show();
        		swim();
        	}
        
        }
      
    • 抽象装饰角色:包含一个组件的引用,并定义了与抽象组件一致的接口(CarDecorator)。

        public abstract class CarDecorator implements Car {
        
        	private Car car;
        
        	public CarDecorator(Car car) {
        		this.car = car;
        	}
        
        	public abstract void show();
        
        	public Car getCar() {
        		return car;
        	}
        
        	public void setCar(Car car) {
        		this.car = car;
        	}
        }
      
    • 具体装饰角色:为抽象装饰角色的实现类。负责具体的装饰(RunCar)。

        /*被修饰的对象*/
        public class RunCar implements Car {
        
        	@Override
        	public void run() {
        		System.out.println("可以跑的车");
        	}
        
        	@Override
        	public void show() {
        		run();
        	}
        	
        }
      
    • Main方法

        public class Main {
        
        	public static void main(String[] args) {
        		Car car = new RunCar();
        		CarDecorator flyCar = new FlyCarDecorator(car);
        		CarDecorator swimCar = new SwimCarDecorator(flyCar);
        		swimCar.show();
        	}
        
        }
  • 相关阅读:
    linux 内核优化
    ip_forward与路由转发
    mysql 集群 galera
    mysql 中间件 mycat
    mysql 主-主-从-从
    mysql 主从复制
    mysql 备份
    mysql 日志
    java中四种权限修饰符区别
    Java中关于Math的几个取整方法的区别
  • 原文地址:https://www.cnblogs.com/esileme/p/7593677.html
Copyright © 2020-2023  润新知