23种设计模式_装饰模式

来源:互联网 发布:mysql limit实现 编辑:程序博客网 时间:2024/04/28 01:43

装饰模式(decorator)(对象的组合关系)

职责:动态的为一个对象增强新的功能

 

实现:类的定义

package com.lichao.Decorator;

//接口

public interface ICar {

public void move();

}

//实现类

class MoveCarimplements ICar{

@Override

public void move() {

System.out.println("车在路上移动");

}

}

//具体的引用---装饰角色

class DefiCarimplements ICar{

protected ICariCar;

public DefiCar(ICar iCar) {

super();

this.iCar = iCar;

}

 

@Override

public void move() {

iCar.move();

}

}

//新增功能

class FlyCarextends DefiCar{

 

public FlyCar(ICar iCar) {

super(iCar);

}

 

public void flyCar(){

System.out.println("天上飞 ");

}

 

@Override

public void move() {

super.move();

flyCar();

}

}

//新增功能

class PeopleCarextends DefiCar{

 

public PeopleCar(ICar iCar) {

super(iCar);

}

 

public void PeopleCar(){

System.out.println("智能人工 ");

}

 

@Override

public void move() {

super.move();

PeopleCar();

}

}

//新增功能

class WaterCarextends DefiCar{

 

public WaterCar(ICar iCar) {

super(iCar);

}

 

public void WaterCar(){

System.out.println("水下游 ");

}

 

@Override

public void move() {

super.move();

WaterCar();

}

}

 

DecoratorApp

package com.lichao.Decorator;

 

public class DecoratorApp {

public static void main(String[] args) {

MoveCar moveCar = new MoveCar();

moveCar.move();

DefiCar defiCar = new DefiCar(moveCar);

System.out.println("------------增加飞的功能---------------");

FlyCar flyCar = new FlyCar(defiCar);

flyCar.move();

System.out.println("------------增加水里泡的功能-----------");

WaterCar water =new  WaterCar(moveCar);

water.move();

System.out.println("-----------都要-----------");

PeopleCar people = new PeopleCar(new WaterCar(new FlyCar(defiCar)));

people.move();

}

}

 

 

 

 

总结:

a) 装饰模式也叫包装器模式(Wrapper)

b) 装饰模式降低系统的愈合度,可以动态的增加或删除对象的职责,并使得需要装饰的具体构建类和具有装饰类可以相互独立,以便增加新的具体构建类和具体装饰类。


1 0
原创粉丝点击