系列文章目录
第五章设计模式(下)
目录
系列文章目录
前言
一、装饰(Decorator)模式是什么?
二、装饰(Decorator)模式的优缺点
三、装饰(Decorator)模式的结构
四、实例演示
1.实例概述
2.代码演示
3.实验结果
总结
前言
设计模式,又称为软件设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
学习设计模式可以提高程序员的思维能力、编程能力和设计能力,使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高,从而缩短软件的开发周期。
设计模式,又称为软件设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
学习设计模式可以提高程序员的思维能力、编程能力和设计能力,使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高,从而缩短软件的开发周期。
一、装饰(Decorator)模式是什么?
在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。
二、装饰(Decorator)模式的优缺点
优点:
1)采用装饰模式扩展对象的功能比采用继承方式更加灵活;
2)可以设计出多个不同的具体装饰类,创造出多个不同行为的组合。
缺点:
1)装饰模式增加了许多子类,如果过度使用会使程序变得很复杂。
三、装饰(Decorator)模式的结构
装饰模式主要包含以下角色:
1)抽象构件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象。
2)具体构件(Concrete Component)角色:实现抽象构件,通过装饰角色为其添加一些职责。
3)抽象装饰(Decorator)角色:继承抽象构件,并包含具体构件的实例,可以通过其子类扩展具体构件的功能。
4)具体装饰(Concrete Decorator)角色:实现抽象装饰的相关方法,并给具体构件对象添加附加的责任。
四、实例演示
1.实例概述
抽象构件角色:Gender抽象类
具体构件角色:Man类或Woman类
抽象装饰角色:Deractor抽象类,依赖于Gender类,是为了后面对gender的继承类进行操作
具体装饰角色:T_shirts类,Jacket类,Jeen类···(这里可以自己去扩写很多类)
2.代码演示
在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。
优点:
1)采用装饰模式扩展对象的功能比采用继承方式更加灵活;
2)可以设计出多个不同的具体装饰类,创造出多个不同行为的组合。
缺点:
1)装饰模式增加了许多子类,如果过度使用会使程序变得很复杂。
三、装饰(Decorator)模式的结构
装饰模式主要包含以下角色:
1)抽象构件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象。
2)具体构件(Concrete Component)角色:实现抽象构件,通过装饰角色为其添加一些职责。
3)抽象装饰(Decorator)角色:继承抽象构件,并包含具体构件的实例,可以通过其子类扩展具体构件的功能。
4)具体装饰(Concrete Decorator)角色:实现抽象装饰的相关方法,并给具体构件对象添加附加的责任。
四、实例演示
1.实例概述
抽象构件角色:Gender抽象类
具体构件角色:Man类或Woman类
抽象装饰角色:Deractor抽象类,依赖于Gender类,是为了后面对gender的继承类进行操作
具体装饰角色:T_shirts类,Jacket类,Jeen类···(这里可以自己去扩写很多类)
2.代码演示
装饰模式主要包含以下角色:
1)抽象构件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象。
2)具体构件(Concrete Component)角色:实现抽象构件,通过装饰角色为其添加一些职责。
3)抽象装饰(Decorator)角色:继承抽象构件,并包含具体构件的实例,可以通过其子类扩展具体构件的功能。
4)具体装饰(Concrete Decorator)角色:实现抽象装饰的相关方法,并给具体构件对象添加附加的责任。
1.实例概述
抽象构件角色:Gender抽象类
具体构件角色:Man类或Woman类
抽象装饰角色:Deractor抽象类,依赖于Gender类,是为了后面对gender的继承类进行操作
具体装饰角色:T_shirts类,Jacket类,Jeen类···(这里可以自己去扩写很多类)
2.代码演示
抽象构件角色:Gender抽象类
具体构件角色:Man类或Woman类
抽象装饰角色:Deractor抽象类,依赖于Gender类,是为了后面对gender的继承类进行操作
具体装饰角色:T_shirts类,Jacket类,Jeen类···(这里可以自己去扩写很多类)
代码如下(示例):
package Decorate;
public class ClothDerector {
public static void main(String[] args) {
// 生成了一个人
Man man = new Man();
// 选择牛仔上衣
derector jacket = new Jacket(man);
jacket.dress();
// 选择牛仔裤
Jeen jeen = new Jeen(jacket);
jeen.dress();
}
}
//抽象构件
abstract class Gender {
public abstract void dress();
}
//具体构件
class Man extends Gender{
public void dress() {
System.out.println("一个男人");
}
}
class Woman extends Gender{
public void dress() {
System.out.println("一个女人");
}
}
//抽象装饰
abstract class derector extends Gender {
Gender gender;
public derector(Gender gender) {
this.gender = gender;
}
}
//具体装饰
class T_shirts extends derector {
public T_shirts(Gender gender) {
super(gender);
// TODO Auto-generated constructor stub
}
@Override
public void dress() {
// TODO Auto-generated method stub
System.out.println("T_shirts");
}
}
class Jacket extends derector {
public Jacket(Gender gender) {
super(gender);
// TODO Auto-generated constructor stub
}
@Override
public void dress() {
// TODO Auto-generated method stub
System.out.println("Jacket");
}
}
class Jeen extends derector {
public Jeen(Gender gender) {
super(gender);
// TODO Auto-generated constructor stub
}
@Override
public void dress() {
// TODO Auto-generated method stub
System.out.println("Jeen");
}
}
3.实验结果
Jacket
Jeen
总结
Jacket
Jeen
以上就是今天要讲的内容,本文仅仅简单介绍了结构模式下装饰模式的定义,优缺点以及其的模式结构,并通过实例演示,进一步反应了在一定需求条件下,装饰模式的优点。



