湖南省做网站那个企业便宜,中山 网站推广,牛商网络,wordpress 自定义筛选一.装饰器模式职责#xff1a;
动态的为一个对象增加新的功能#xff1b;装饰器是一种用于代替继承的技术#xff0c;无须通过继承增加子类就能扩展对象的新功能#xff0c;使用对象的关联关系代替继承关系#xff0c;更加灵活#xff0c;同时避免类型体系的快速膨胀。 …一.装饰器模式职责
动态的为一个对象增加新的功能装饰器是一种用于代替继承的技术无须通过继承增加子类就能扩展对象的新功能使用对象的关联关系代替继承关系更加灵活同时避免类型体系的快速膨胀。
二.装饰器模式优点
扩展对象功能比较灵活不会导致类个数急剧增加可以对一个对象进行多次装饰创作出不同行为的组合得到功能更加强大的对象具体构建类和具体装饰类可以独立变化用户可以根据需要自己增加新的具体构建子类和具体装饰子类。
三.装饰器模式缺点
产生很多小对象大量小对象占据内存一定程度上影响性能装饰模式易于出错调试排查比较麻烦。
四.装饰器模式总结
装饰器模式也叫包装器模式装饰器模式降低系统的耦合度可以动态的增加或删除对象的职责并使得需要装饰的具体构建类和具体装饰类可以独立变化以便增加新的具体构建类和具体装饰类。
五.代码实现 1.抽象组件
/*** 抽象组件角色*/
public interface ICar {/*** 移动*/void move();
}2.具体组件角色
/*** 具体组件角色(真实角色)*/
public class Car implements ICar{Overridepublic void move() {System.out.println(陆地跑。。。。);}
}3.装饰器角色
/*** 装饰器角色*/
public class SuperCar implements ICar{public ICar car;public SuperCar(ICar car) {this.car car;}Overridepublic void move() {car.move();}
}4.具体装饰器角色
/*** 天上飞。。。。*/
public class flyCar extends SuperCar{public flyCar(ICar car) {super(car);}public void fly(){System.out.println(天上飞。。。。);}Overridepublic void move() {super.move();fly();}
}
/*** 水中游。。。。*/
public class WaterCar extends SuperCar{public WaterCar(ICar car){super(car);}public void swim(){System.out.println(水中游。。。。);}Overridepublic void move() {super.move();swim();}
}
/*** 自动跑。。。。*/
public class IDCar extends SuperCar{public IDCar(ICar car) {super(car);}public void autoMove(){System.out.println(自动跑。。。。);}Overridepublic void move() {super.move();autoMove();}
}5.装饰器调用
/*** 装饰器模式*/
public class App {public static void main(String[] args) {Car carnew Car();car.move();System.out.println(添加新功能飞。。。。);flyCar flynew flyCar(car);fly.move();System.out.println(添加新功能飞、。。。。游、、、、);WaterCar waternew WaterCar(fly);water.move();}
}更多设计模式学习 设计模式(1)介绍 设计模式(2)单例模式 设计模式(3)工厂模式 设计模式(4)建造者模式 设计模式(5)原型模式 设计模式(6)桥接模式 设计模式持续更新中…