目录
1【装饰模式应用场景举例】    1
2【策略模式应用场景举例】    5
3【代理模式应用场景举例】    8
4【外观模式应用场景举例】    12
5【抽象工厂模式应用场景举例】    14
6【观察者模式应用场景举例】    22
7【建造者模式应用场景举例】    27
8【原型模式应用场景举例】    32
9【工厂方法模式应用场景举例】    36
10【模板方法模式应用场景举例】    40
1【装饰模式应用场景举例
    比如在玩“极品飞车”这款游戏,游戏中有对汽车进行喷涂鸦的功能,而且这个喷涂鸦是可以覆盖的,并且覆盖的顺序也影响到最后车身的显示效果,假设现在喷涂鸦具有2种样式:(1)红火焰 (2)紫霞光如果使用“继承父类”设计这样的功能,那么类图就像如下的这样:
    从图中可以看到使用继承来实现这种功能,并且是2种涂鸦样式,就需要创建4个子类,如
果喷涂鸦有3种,4种呢?这种情况就是典型中学课程学习过的“排列与组合”,那简直就是“Head First设计模式”书中讲的“类爆炸”。
    显然继承“奥迪汽车类”的这个办法是无效,而且是非常徒劳,繁琐的。
    那么如何才能以“灵活”,“顺序敏感”这样的需求来实现这样的功能呢?
    【装饰模式解释
    类型:结构模式
    动态的对一个对象进行功能上的扩展,也可以对其子类进行功能上的扩展。
    【装饰模式UML图
装饰模式-JAVA代码实现
    新建一个抽象汽车父类:
package car_package;
public abstract class car_parent {
    // 汽车抽象父类
    private String make_address;
    private int speed;
    public String getMake_address() {
        return make_address;
    }
    public void setMake_address(String make_address) {
        this.make_address = make_address;
    }
    public int getSpeed() {
        return speed;
    }
    public void setSpeed(int speed) {
        this.speed = speed;
    }
    public abstract void print_face();
}
    然后新建一个奥迪汽车子类
package car_package;
public class audi_sub extends car_parent {
    // 奥迪汽车子类
    @Override
    public void print_face() {
        System.out.println("audi车默认的颜为 黑");
    }
}
    然后再新建一个装饰者父类:
package decorator_package;
import car_package.car_parent;
public abstract class decorator_parent extends car_parent {
    // 装饰者父类
    protected car_parent car_parent_ref;
    public void setCar_parent_ref(car_parent car_parent_ref) {
        this.car_parent_ref = car_parent_ref;
    }
    @Override
    public void print_face() {
        car_parent_ref.print_face();
    }
}
    然后再新建装饰者子类:红火焰装饰者类:
package decorator_package;
public class decorator_audi_red extends decorator_parent {
    @Override
    public void print_face() {
        super.print_face();
        System.out.println("给 奥迪 喷涂鸦 - 颜为 红火焰");
    }
}
    然后再新建装饰者子类:紫霞光装饰者类:
package decorator_package;
public class decorator_audi_purple extends decorator_parent {
    @Override
    public void print_face() {
        super.print_face();
        System.out.println("给 奥迪 喷涂鸦 - 颜为 紫霞光");
    }
}
    新建一个运行类
package main_run;

import car_package.audi_sub;
import decorator_package.decorator_audi_purple;
import decorator_package.decorator_audi_red;

publicjava中常用的设计模式有哪些 class main_run {

    public static void main(String[] args) {

        audi_sub audi_sub_ref = new audi_sub();
        audi_sub_ref.setMake_address("北京市朝阳区");
        audi_sub_ref.setSpeed(200);

        decorator_audi_red decorator_audi_red_ref = new decorator_audi_red();
        decorator_audi_red_ref.setCar_parent_ref(audi_sub_ref);

        decorator_audi_purple decorator_audi_purple_ref = new decorator_audi_purple();
        decorator_audi_purple_ref.setCar_parent_ref(decorator_audi_red_ref);

        decorator_audi_purple_ref.print_face();
    }
}
    程序运行结果如下:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。