ErBing

往事已经定格,未来还要继续。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

来源:http://www.bjsxt.com/ 
一、【GOF23设计模式】_装饰模式、IO流底层架构、装饰和桥接模式的区别

职责

简单案例说明

 1 package com.test.decorator;
 2 /**
 3  * Component抽象构件角色
 4  */
 5 public interface ICar {
 6     void move();
 7 }
 8 
 9 //ConcreteComponent 具体构件角色(真实对象)
10 class Car implements ICar {
11     @Override
12     public void move() {
13         System.out.println("陆地上跑!");
14     }
15 }
16 
17 //Decorator装饰角色
18 class SuperCar implements ICar {
19     protected ICar car;
20 
21     public SuperCar(ICar car) {
22         super();
23         this.car = car;
24     }
25 
26     @Override
27     public void move() {
28         car.move();
29     }
30 }   
31 
32 //ConcreteDecorator具体装饰角色
33 class FlyCar extends SuperCar {
34 
35     public FlyCar(ICar car) {
36         super(car);
37     }
38 
39     public void fly() {
40         System.out.println("天上飞!");
41     }
42 
43     @Override
44     public void move() {
45         super.move();
46         fly();
47     }
48 }
49 //ConcreteDecorator具体装饰角色
50 class WaterCar extends SuperCar {
51 
52     public WaterCar(ICar car) {
53         super(car);
54     }
55 
56     public void swim() {
57         System.out.println("水上游!");
58     }
59 
60     @Override
61     public void move() {
62         super.move();
63         swim();
64     }
65 }
66 //ConcreteDecorator具体装饰角色
67 class AICar extends SuperCar {
68 
69     public AICar(ICar car) {
70         super(car);
71     }
72 
73     public void autoMove() {
74         System.out.println("自动跑!");
75     }
76 
77     @Override
78     public void move() {
79         super.move();
80         autoMove();
81     }
82 }
package com.test.decorator;

public class Client {
    public static void main(String[] args) {
        Car car = new Car();
        car.move();

        System.out.println("增加新的功能,飞行--------------");
        FlyCar flyCar = new FlyCar(car);
        flyCar.move();

        System.out.println("增加新的功能,水上游--------------");
        WaterCar waterCar = new WaterCar(car);
        waterCar.move();

        System.out.println("增加两个新的功能:飞行,水上游----------------");
        WaterCar waterCar2 = new WaterCar(new FlyCar(car));
        waterCar2.move();
    }
}
控制台输出:
陆地上跑!
增加新的功能,飞行--------------
陆地上跑!
天上飞!
增加新的功能,水上游--------------
陆地上跑!
水上游!
增加两个新的功能:飞行,水上游----------------
陆地上跑!
天上飞!
水上游!

实现细节

开发中的使用场景

IO流实现细节

总结

装饰模式和桥接模式的区别

posted on 2016-08-24 12:49  ErBing  阅读(200)  评论(0编辑  收藏  举报