当前位置: 首页 > wzjs >正文

网站建设设计维片页面优化的方法

网站建设设计维片,页面优化的方法,顺徳网站建设公司有哪些,如何创建旅游网站说明:本文介绍结构型设计模式之一的装饰器模式 定义 装饰器模式(Decorator Pattern)也叫作包装器模式(Wrapper Pattern),指再不改变原有对象的基础上,动态地给一个对象添加一些额外的职责。就…

说明:本文介绍结构型设计模式之一的装饰器模式

定义

装饰器模式(Decorator Pattern)也叫作包装器模式(Wrapper Pattern),指再不改变原有对象的基础上,动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活,属于结构型设计模式。(引自《设计模式就该这样学》P201)

化妆例子

以女孩化妆为例,如下:

(可展示接口,Showable)

/*** 能展示的*/
public interface Showable {/*** 展示方法*/void show();
}

(女生对象,Girl)

/*** 女生对象*/
public class Girl implements Showable {@Overridepublic void show() {System.out.print("女孩素颜的面容");}
}

(装饰类,Decorator)

/*** 装饰类*/
public class Decorator implements Showable {private Showable showable;/*** 构造器注入*/public Decorator(Showable showable) {this.showable = showable;}@Overridepublic void show() {System.out.print("抹上淡淡的粉底【");showable.show();System.out.print("】");}
}

(客户端,Client)

public class Client {public static void main(String[] args) {new Decorator(new Girl()).show();}
}

装饰器类扩展了原对象的功能,像是一种包装,包装后更丰富了

在这里插入图片描述

更进一步

在上述化妆的例子上,更进一步,抽象出一个装饰器类,如下:

(装饰抽象类,Decorator)

/*** 装饰类*/
public abstract class Decorator implements Showable {private Showable showable;/*** 构造器注入*/public Decorator(Showable showable) {this.showable = showable;}@Overridepublic void show() {showable.show();}
}

(粉底类,继承装饰类,FoundationMakeup)

/*** 粉底类*/
public class FoundationMakeup extends Decorator {/*** 构造器注入*/public FoundationMakeup(Showable showable) {super(showable);}@Overridepublic void show() {System.out.print("抹上淡淡的粉底【");super.show();System.out.print("】");}
}

(口红类,继承装饰类,Lipstick)

/*** 口红类*/
public class Lipstick extends Decorator {/*** 构造器注入*/public Lipstick(Showable showable) {super(showable);}@Overridepublic void show() {System.out.print("抹上一层口红【");super.show();System.out.print("】");}
}

(客户端使用,Client,可以自由组合装饰方式)

public class Client {public static void main(String[] args) {// 搭配一new Lipstick(new FoundationMakeup(new Girl())).show();System.out.println();// 搭配二new FoundationMakeup(new Lipstick(new Girl())).show();}
}

运行如下:

在这里插入图片描述

JDK源码体现

装饰器模式,在JDK的IO流设计上有体现,如下:

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.zip.ZipInputStream;public class Client {public static void main(String[] args) throws FileNotFoundException {// 装饰器模式在Java源码的体现File file = new File("./src/main/java/structural/decorator/Client.java");ZipInputStream zipInputStream = new ZipInputStream(new BufferedInputStream(new FileInputStream(file)));}
}

扒一下源码,可见ZipInputStreamBufferedInputStreamFileInputStream都继承自抽象类InputStream,类比一下前面的化妆例子,InputStream也就是装饰抽象类。

  • ZipInputStream -> InflaterInputStream -> FilterInputStream -> InputStream

  • BufferedInputStream -> FilterInputStream -> InputStream

  • FileInputStream -> InputStream

与代理模式的区别

关于装饰器模式与代理模式的区别,这里介绍两本书中给的区别:

代理模式和装饰模式在实现时有些类似,但是代理模式主要是给真是主题类增加一些全新的职责,例如权限控制、缓冲处理、智能引用、远程访问等,这些职责与原有职责不属于同一个问题域。而装饰模式是通过装饰类为具体构件类增加一些相关的职责,是对原有职责的扩展,这些职责属于同一问题域。代理模式和装饰模式的目的也不相同,前者是控制对对象的访问,而后者是为对象动态地增加功能。
(引自《设计模式的艺术》刘伟著,第一版P201)


在《设计模式就该这样学》(P214)中,举了一个不错的例子:

简单来讲,假设现在想租房,那么势必会有一些事务发生:房源搜索、联系房东谈价格等。

假设按照代理模式进行思考,那么小明只需要找到一个房产中介,让他去做房源搜索、联系房东谈价格这些事情,小明只需要等待通知然后付中介费就行了。

而如果采用装饰器模式进行思考,因为装饰器模式强调的是自身功能扩展,也就是说,如果要找房子,小明自身就要增加房源搜索能力扩展、联系房东谈价格能力扩展,通过相应的装饰器,提升自身能力,一个人做完所有的事情。

我的理解,装饰器模式与代理模式都能解决问题,没有非装饰器模式能解决的问题,代理模式也是,区别在于解决问题的角度:从内到外,是装饰器模式,从外到内,是代理模式。

总结

本文介绍了结构型设计模式中的装饰器模式,参考《设计模式就该这样学》、《秒懂设计模式》、《设计模式的艺术》三本书,其中化妆的例子来自《秒懂设计模式》。

http://www.dtcms.com/wzjs/323452.html

相关文章:

  • 微网站购物网站网址大全网站
  • 舟山网站建设代理自己搜20条优化措施
  • 建设网站教程视频视频下载百度点击排名收费软件
  • 即墨网站建设在哪可以投放广告的网站
  • 用模板建站互联网营销师培训教材
  • 男女做那个视频网站免费自拍西地那非片的功能主治和副作用
  • 珠海网站建seo网站优化经理
  • 北京两区建设在哪里北京seo编辑
  • 北京百度seo排名公司知了seo
  • 网站是怎么做优化上海外贸网站seo
  • web中英文网站怎么做企业培训内容包括哪些内容
  • 响应式 网站建设哪里可以引流到精准客户呢
  • cpanel wordpress南宁seo全网营销
  • 餐饮酒店网站建设自己创建网页
  • 广州公司网站搜索引擎优化包括哪些
  • 建筑工程网线接头规范抖音搜索引擎优化
  • 东营长安网站建设阿里指数怎么没有了
  • 哪家公司做网站不错每日关键词搜索排行
  • 记事本做网站改变图片大小谷歌推广怎么操作
  • 福州做网站需要多少钱甘肃搜索引擎网络优化
  • wap网站微信分享代码拉新平台哪个好佣金高
  • 微信自助下单小程序seo日常优化内容是什么
  • 个人建设网站服务器怎么解决广告sem是什么意思
  • 大气企业网站欣赏宠物美容师宠物美容培训学校
  • 高级网站建设常见的网络营销方法
  • 政务网站建设目的 意义seo是哪个英文的简写
  • 空调设备公司网站建设网站的推广优化
  • 给朋友做网站警察开找百度官网首页登录入口
  • 免费网站为何收录比较慢新媒体营销六种方式
  • 下载站cms优化大师最新版本