装饰模式----设计模式系列

装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

优点:把类中的装饰功能从类中搬移去除,这样可以简化原有的类。可以有效地把类的核心职责和装饰功能区分开,而且可以去除相关类中重复的装饰逻辑。

使用场景:为已有功能动态地添加更多功能的一种方式。

下面以一个小Demo为例讲解:Tshirts(Shoe、Kuzi) extends Finery ,Finery extends Person 。Decorate为测试类

(1)被装饰的类

public class Person {

	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public void show(){
		System.out.println("装扮的"+name);
	}

}

(2)装饰类

public class Finery extends Person {

	protected Person mPerson;

	public void decorate(Person person) {
		mPerson = person;
	}

	@Override
	public void show() {
		if (mPerson != null) {
			mPerson.show();
		}

	}

}

(3)具体装饰类Tshirt  (Shoe和Kuzi同理)

public class TShirts extends Finery {

	@Override
	public void show() {

		System.out.println("TShirts");
		super.show();
	}
}

(4)测试类

/**装饰者模式*/
public class Decorate {

	public static void main(String[] args) {

		Person mPerson = new Person();
		mPerson.setName("董永康");

		TShirts mTShirts = new TShirts();
		Kuzi mKuzi = new Kuzi();
		Shoe mShoe = new Shoe();

		mTShirts.decorate(mPerson);
		mKuzi.decorate(mTShirts);
		mShoe.decorate(mKuzi);
		mShoe.show();

	}

}

总结:两层继承关系,Tshirts(Shoe、Kuzi) extends Finery extends Person
Finery作为连接Person和Tshirts类的“桥梁”,子类show中调用super.show,在装饰的时候传递子类对象,然后调用子类对象的show方法。循环直到结束。这样做使每个装饰对象的实现和如何使用这个对象分离开了。每个装饰对象只关心自己的功能,不需要关心如何被添加到对象链当中。

时间: 2024-10-29 21:19:37

装饰模式----设计模式系列的相关文章

大话设计模式系列

原文:大话设计模式系列 1.设计模式之前奏(UML类图) 2.设计模式之一(单例模式) 3.设计模式之二(简单工厂模式) 4.设计模式之三(工厂方法模式) 5.设计模式之四(抽象工厂模式第一回合) 6.设计模式之四(抽象工厂模式 第二回合) 7.设计模式之四(抽象工厂模式 第三回合) 8.设计模式原则(单一.开放封 闭.里氏代换.依赖倒转.迪米特法则五大原则) 9.设计模式之五(策略模式) 10.设计模式之六(装饰模式) 11.设计模式之七(代理模式) 12.设计模式之八(原型模式) 13.设计

Android设计模式系列之工厂方法模式_Android

工厂方法模式,往往是设计模式初学者入门的模式,的确,有人称之为最为典型最具启发效果的模式. android中用到了太多的工厂类,其中有用工厂方法模式的,当然也有很多工厂并不是使用工厂方法模式的,只是工具管理类. 今天以ThreadFactory举例说明一下简单工厂模式和工厂方法模式. 工厂方法模式,Factory Method,简单的方式,不简单的应用. 1.意图 定义一个用于创建对象的接口,让子类决定实例化哪个类.工厂方式模式使一个类的实例化延迟到其子类. 热门词汇:虚构造器 延迟 创建对象

Android设计模式系列之组合模式_Android

Android中对组合模式的应用,可谓是泛滥成粥,随处可见,那就是View和ViewGroup类的使用.在android UI设计,几乎所有的widget和布局类都依靠这两个类. 组合模式,Composite Pattern,是一个非常巧妙的模式.几乎所有的面向对象系统都应用到了组合模式. 1.意图 将对象View和ViewGroup组合成树形结构以表示"部分-整体"的层次结构(View可以做为ViewGroup的一部分). 组合模式使得用户对单个对象View和组合对象ViewGrou

PHP 设计模式系列之 specification规格模式_php实例

1.模式定义 规格模式是组合模式的一种扩展,在框架性开发中使用较多(项目级开发很少使用),这里做一个简单的介绍. 规格模式(Specification)可以认为是组合模式的一种扩展.有时项目中某些条件决定了业务逻辑,这些条件就可以抽离出来以某种关系(与.或.非)进行组合,从而灵活地对业务逻辑进行定制.另外,在查询.过滤等应用场合中,通过预定义多个条件,然后使用这些条件的组合来处理查询或过滤,而不是使用逻辑判断语句来处理,可以简化整个实现逻辑. 这里的每个条件就是一个规格,多个规格/条件通过串联的

Android设计模式系列之单例模式

单例模式,可以说是GOF的23种设计模式中最简单的一个. 这个模式相对于其他几个模式比较独立,它只负责控制自己的实例化数量单一(而不是考虑为用户产生什么样的实例),很有意思,是一个感觉上很干净的模式,本人很喜欢这个模式. android中很多地方都用到了单例模式,本文以输入法管理者InputMethodManager为例,展开分析. 单例模式,Singleton Pattern,能够以其特有的优势,替代系统中全局变量,应用非常广泛. 1.意图 保证一个类仅有一个实例,并提供一个访问它的全局访问点

Android设计模式系列之组合模式

Android中对组合模式的应用,可谓是泛滥成粥,随处可见,那就是View和ViewGroup类的使用.在android UI设计,几乎所有的widget和布局类都依靠这两个类. 组合模式,Composite Pattern,是一个非常巧妙的模式.几乎所有的面向对象系统都应用到了组合模式. 1.意图 将对象View和ViewGroup组合成树形结构以表示"部分-整体"的层次结构(View可以做为ViewGroup的一部分). 组合模式使得用户对单个对象View和组合对象ViewGrou

C# 设计模式系列教程-装饰模式_C#教程

1. 概述 动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更灵活. 原理:增加一个修饰类包裹原来的类,包裹的方式一般是通过在将原来的对象作为修饰类的构造函数的参数.装饰类实现新的功能,但是,在不需要用到新功能的地方,它可以直接调用原来的类中的方法.修饰类必须和原来的类有相同的接口. 2. 模式中的角色 2.1 抽象构建(Component):定义一个抽象接口,用以给这些对象动态地添加职责. 2.2 具体构建(ConcreteComponent):定义一个具体的对象,也可以

JPA设计模式系列一 DAO Pattern in JPA

作为JavaEE5 规范一部分的JPA,已经有众多的实现,比如:Hiberante,TopLink, EclipseLink和OpenJPA 等许多ORM框架.JPA不仅仅应用于EJB3中,你也可以应用EJB3之外的应用,比如Spring 中.甚至Gavin King Hiberante的作者 在Hiberante in Action 的第二版书中也推荐使用JPA.很明显,JPA将被广泛的应用. 一旦你熟悉annotation,并尝试过Hello world之类的程序后,你会感觉,恩 JPA确实

.NET设计模式系列文章

目录计划: 第Ⅰ部分 开篇 开篇 第Ⅱ部分 创建型模式篇 第1章 单件模式(Single Pattern) 第2章 抽象工厂模式(Abstract Factory) 第3章 建造者模式(Builder Pattern) 第4章 工厂方法(Factory Method) 第5章 原型模式(Protype Pattern) 第6章 创建型模式专题总结 第Ⅲ部分 结构型模式篇 第7章 适配器模式(Adapter Pattern) 第8章 桥接模式(Bridge Pattern) 第9章 装饰模式(De