JAVA设计模式——装饰设计模式
来源:互联网 发布:软件开发质量管理体系 编辑:程序博客网 时间:2024/06/05 08:21
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
到这里可以发现,如果我们继承Person类同样可以实现该功能,为何要用装饰设计模式呢?
想要对已有的对象进行功能的增强时
可以定义类,将已有对象传入,基于已有的功能,提供加强功能
那么自定义的这个类就被称之为装饰类
举个简单的例子:
/** * 装饰类示例 * @author Shawn·Zhang */class Person{public void eat() {System.out.println("吃饭");}}//要求:增强吃饭方法,并且不能改变原有代码//分析:这时,我们需要定义一个类,来增强,也就是对之前Person类进行修饰//我们新建一个SuperPerson类进行装饰class SuperPerson{//装饰类private Person p;public SuperPerson(Person p) {//有参构造方法,参数为被装饰对象this.p = p;}public void superEat(){System.out.println("开胃酒");p.eat();System.out.println("餐后甜点");}}public class PersonDemo {public static void main(String[] args) {Person p = new Person();SuperPerson sp = new SuperPerson(p);sp.superEat();}}
到这里可以发现,如果我们继承Person类同样可以实现该功能,为何要用装饰设计模式呢?
这也就引入了装饰设计模式对比继承的优势了
可以看到,装饰是创建有参构造函数,通过参数的传递来实现功能的增强
而继承,则是为了增强功能而重新创建一个子类,这样会使得整个体系变得臃肿
装饰类相比继承,保持了灵活性强及扩展性强等特点,并且减少了类和类之间的联系,也避免了体系的臃肿
下面引入一个现实生活中的案例,以便理解:
例如一辆汽车,在满足基本的功能上面,假如你需要增加某些功能,只需要增加即可,而不需要将汽车拆了重新组装,这样的例子就能很好的说明装饰设计模式的好处
/** * 包装设计模式 * 汽车 * |--桑塔纳 * |--倒车影像 * |--索纳塔 * |--自动泊车 * * 装饰模式后 * 汽车 * |--桑塔纳 * |--索纳塔 * |--倒车影像 * |--自动泊车 * @author Shawn·Zhang * */abstract class Car{//抽象类abstract void show();}class Santana extends Car{@Overridepublic void show() {System.out.println("桑塔纳");}}class Sonata extends Car{@Overridevoid show() {System.out.println("索纳塔");}}class RadarCar{private Car car;public RadarCar(Car car) {this.car = car;}public void show(){car.show();System.out.println("具有倒车影像功能");}}public class MyCar {public static void main(String[] args) {Car car = new Santana();System.out.println("-------------------包装前-------------------");car.show();RadarCar rcar = new RadarCar(car);System.out.println("-------------------包装后-------------------");rcar.show();}}
PS:自动泊车和倒车影像同理,代码中没有写明。
0 0
- java设计模式——装饰模式
- java设计模式——装饰模式
- java设计模式——装饰模式
- java设计模式——装饰模式
- Java设计模式——装饰模式
- Java 设计模式—装饰者模式
- Java设计模式—装饰模式
- java设计模式—装饰者模式
- 浅谈Java设计模式—-装饰模式
- 设计模式—装饰模式
- 设计模式—装饰模式
- 设计模式—装饰模式
- 设计模式—装饰模式
- 设计模式—装饰模式
- Java设计模式之——装饰设计模式
- JAVA设计模式——装饰设计模式
- Java设计模式——装饰者设计模式
- Java设计模式——装饰设计模式
- eclipse导出jar包的问题总结
- go-xorm使用mssql的小实例
- maven使用初步
- 记录:动态日历生成
- kafka使用初步
- JAVA设计模式——装饰设计模式
- SQL Server之SQLEXPRESS和MSSQLSERVER两个服务的问题
- 用maven2重写zookeeper客户端测试程序
- 疯狂猜歌实现(1)—— 实现顶部布局
- 深入理解HTTP协议
- 新手如何做好微信营销
- 二维数组中的查找
- 外排序(磁盘排序)之多路归并排序的简单实现(转)
- Android之Handler用法总结