装饰设计模式就是对已有的对象的功能进行增强
简单小例子:
class Person
{
void chifan()
{
System.out.println("chifan");
}
}
/*
为了不随便改变原有的代码。
还要增强chifan功能。
那么就定义一个类,对原有对象进行装饰。
*/
class NewPerson
{
private Person p;
NewPerson(Person p)
{
this.p = p;
}
public void newChifan()
{
System.out.println("来一杯");
p.chifan();
System.out.println("来一根");
}
}
class PersonDemo
{
public static void main(String[] args)
{
Person p = new Person();
//NewPerson np = new NewPerson(p);
//np.newChifan();
p.chifan();
}
}
我们考虑一下使用继承也可以对父类中的功能进行增强只需要调用super就可以调用父类的方法,那使用装饰和继承有什么区别?
使用继承体系就会有点臃肿,因为当平房想要改成欧式时,还要建立子类。
Writer
|--FileWriter
|--BufferedFileWriter。
|--DataWriter
|--BufferedDataWriter。
|--MediaWriter
|--BufferedMediaWriter.
优化:
可以将缓冲技术单独抽取进行封装。
要缓冲区谁将谁和缓冲相关联即可。
这样的设计的相对体系会变的简单。
使用继承带来的局限性:
/*
房子:平房,楼房。
House
|--PingFang
|--LouFang
准备对房子进行装修。
1,对平房进行田园风光式的打造。
2,对楼房进行欧式风格的打造。
可以用继承的方式来完成。
House
|--PingFang
|--TianYuanPingFang
|--LouFang
|--OuShiLouFang
该体系就有点臃肿,因为当平房想要改成欧式时,还要建立子类。
*/
abstract class House
{
abstract void show();
}
class PingFang extends House
{
public void show()
{
System.out.println("平房");
}
}
class TianYuanPingFang extends PingFang
{
public void showTianYuan()
{
super.show();
System.out.println("田园风格");
}
}
class LouFang extends House
{
public void show()
{
System.out.println("楼房");
}
}
class OuShiLouFang extends LouFang
{
public void showOuShi()
{
super.show();
System.out.println("欧式风格");
}
}
class HouseDemo
{
public static void main(String[] args)
{
PingFang p = new PingFang();
///p.show();
TianYuanPingFang t = new TianYuanPingFang();
t.showTianYuan();
LouFang l = new LouFang();
//l.show();
OuShiLouFang o = new OuShiLouFang();
o.showOuShi();
}
}
使用装饰设计模式进行装饰:
/*
原体系:
House
|--PingFang
|--LouFang
无论将平房打造成田园还是欧式,都是对平房一种装修。
而该装修也可以用楼房。
将现将该装修定义好,需要把什么房子进行改装修,传入即可。
House
|--PingFang
|--LouFang
|--TianYuan
|--OuShi
*/
abstract class House
{
abstract void show();
}
class PingFang extends House
{
public void show()
{
System.out.println("平房");
}
}
class LouFang extends House
{
public void show()
{
System.out.println("楼房");
}
}
class TianYuan extends House
{
private House h;
TianYuan(House h)
{
this.h = h;
}
public void show()
{
System.out.println("田园风格");
}
public void showTianYuan()
{
h.show();
this.show();
}
}
class OuShi extends House
{
private House h;
OuShi(House h)
{
this.h = h;
}
public void show()
{
System.out.println("欧式风格");
}
public void showOuShi()
{
h.show();
this.show();
}
}
class HouseDemo2
{
public static void main(String[] args)
{
PingFang p = new PingFang();
LouFang l = new LouFang();
OuShi o = new OuShi(new TianYuan(p));
o.showOuShi();
//TianYuan t = new TianYuan(l);
//t.showTianYuan();
//OuShi o = new OuShi(l);
//o.showOuShi();
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
NULL 博文链接:https://871656094.iteye.com/blog/2355335
设计模式专题之(七)装饰模式---设计模式装饰模式示例代码(python--c++)
设计模式--装饰者模式java例子
Java 经典设计模式讲解以及项目实战 设计模式简介:主要介绍各种设计模式的概念和运用场景等 设计模式综合运用:主要是笔者在实际工作中运用到的一些设计模式综合运用事例的提炼 Spring设计模式简介:主要是讲述...
设计模式07-组合模式、装饰模式 设计模式09-外观模式、享元模式 设计模式10-代理模式、结构型模式大复习 设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式...
java设计模式之装饰者模式代码
软件设计模式之装饰模式讲解ppt,可用于教学课件。
设计模式主要分为三大类: 1.创建型模式:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。 2.结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 4.行为型模式:...
该系统是一个画图程序,我们要用设计模式的思想来设计系统结构,然后实现基本图形的绘制功能。 1.1 设计模式要求 在软件的设计中请使用到三种以上设计模式。 1.2 画图基本要求 能实现基本图形的绘制功能,包括实现...
设计模式—装饰者模式
设计模式 c# 装饰模式
软件设计模式作业,要求用3个设计模式以上实现。代码涉及了装饰模式,工厂模式和适配器模式
设计模式相关资料设计模式相关资料设计模式相关资料设计模式相关资料设计模式相关资料设计模式相关资料
总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...
使用5种设计模式完成的一个点单系统,显示不同系列下的所有商品,点击选择冰度甜度之后添加到订单中,计算总金额,下单之后发送订单到门店的后厨制作商品。使用了抽象工厂模式、装饰模式、单例模式、代理模式、原型...
设计模式 - 装饰模式(C++实例) 若有问题,请指出。
C++23种设计模式之 装饰模式。:当你向旧的类中添加新代码时,一般是为了添加核心职责或主要行为。而当需 要加入的仅仅是一些特定情况下才会执行的特定的功能时(简单点就是不是核心应用的功 能),就会增加类的...
54-Spring设计模式之装饰器模式1
装饰器模式,设计模式.