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

为什么网站需要静态化生成htmlWordPress 导航 自适应

为什么网站需要静态化生成html,WordPress 导航 自适应,万维网站建设,wordpress网站排行榜装饰者模式1、意图#xff1a; 动态地给一个对象添加一些额外的职责。就增加功能来说#xff0c; Decorator模式相比生成子类更为灵活。该模式以对客 户端透明的方式扩展对象的功能。2、适用环境(1)在不影响其他对象的情况下#xff0c;以动态、透明的方式给单个对象添加职责…装饰者模式1、意图 动态地给一个对象添加一些额外的职责。就增加功能来说 Decorator模式相比生成子类更为灵活。该模式以对客 户端透明的方式扩展对象的功能。2、适用环境(1)在不影响其他对象的情况下以动态、透明的方式给单个对象添加职责。(2)处理那些可以撤消的职责。(3)当不能采用生成子类的方法进行扩充时。一种情况是可能有大量独立的扩展为支持每一种组合将产生大量的 子类使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏或类定义不能用于生成子类。3、参与者1.Component(被装饰对象的基类)定义一个对象接口可以给这些对象动态地添加职责。2.ConcreteComponent(具体被装饰对象)定义一个对象可以给这个对象添加一些职责。3.Decorator(装饰者抽象类)维持一个指向Component实例的引用并定义一个与Component接口一致的接口。4.ConcreteDecorator(具体装饰者)具体的装饰对象给内部持有的具体被装饰对象增加具体的职责。4、类图5、涉及角色(1)抽象组件:定义一个抽象接口来规范准备附加功能的类(2)具体组件将要被附加功能的类实现抽象构件角色接口(3)抽象装饰者持有对具体构件角色的引用并定义与抽象构件角色一致的接口(4)具体装饰实现抽象装饰者角色负责对具体构件添加额外功能。1 /定义被装饰者2 public interfaceHuman {3 public voidwearClothes();45 public voidwalkToWhere();6 }78 //定义装饰者9 public abstract classDecorator implements Human {10 privateHuman human;1112 publicDecorator(Human human) {13 this.human human;14 }1516 public voidwearClothes() {17 human.wearClothes();18 }1920 public voidwalkToWhere() {21 human.walkToWhere();22 }23 }2425 //下面定义三种装饰这是第一个第二个第三个功能依次细化即装饰者的功能越来越多26 public classDecorator_zero extends Decorator {2728 publicDecorator_zero(Human human) {29 super(human);30 }3132 public voidgoHome() {33 System.out.println(进房子。。);34 }3536 public voidfindMap() {37 System.out.println(书房找找Map。。);38 }3940 Override41 public voidwearClothes() {42 //TODO Auto-generated method stub43 super.wearClothes();44 goHome();45 }4647 Override48 public voidwalkToWhere() {49 //TODO Auto-generated method stub50 super.walkToWhere();51 findMap();52 }53 }5455 public classDecorator_first extends Decorator {5657 publicDecorator_first(Human human) {58 super(human);59 }6061 public voidgoClothespress() {62 System.out.println(去衣柜找找看。。);63 }6465 public voidfindPlaceOnMap() {66 System.out.println(在Map上找找。。);67 }6869 Override70 public voidwearClothes() {71 //TODO Auto-generated method stub72 super.wearClothes();73 goClothespress();74 }7576 Override77 public voidwalkToWhere() {78 //TODO Auto-generated method stub79 super.walkToWhere();80 findPlaceOnMap();81 }82 }8384 public classDecorator_two extends Decorator {8586 publicDecorator_two(Human human) {87 super(human);88 }8990 public voidfindClothes() {91 System.out.println(找到一件DG。。);92 }9394 public voidfindTheTarget() {95 System.out.println(在Map上找到神秘花园和城堡。。);96 }9798 Override99 public voidwearClothes() {100 //TODO Auto-generated method stub101 super.wearClothes();102 findClothes();103 }104105 Override106 public voidwalkToWhere() {107 //TODO Auto-generated method stub108 super.walkToWhere();109 findTheTarget();110 }111 }112113 //定义被装饰者被装饰者初始状态有些自己的装饰114 public classPerson implements Human {115116 Override117 public voidwearClothes() {118 //TODO Auto-generated method stub119 System.out.println(穿什么呢。。);120 }121122 Override123 public voidwalkToWhere() {124 //TODO Auto-generated method stub125 System.out.println(去哪里呢。。);126 }127 }128 //测试类看一下你就会发现跟java的I/O操作有多么相似129 public classTest {130 public static voidmain(String[] args) {131 Human person newPerson();132 Decorator decorator new Decorator_two(newDecorator_first(133 newDecorator_zero(person)));134 decorator.wearClothes();135 decorator.walkToWhere();136 }137 }运行结果其实就是进房子找衣服然后找地图这样一个过程通过装饰者的三层装饰把细节变得丰富。关键点1、Decorator抽象类中持有Human接口方法全部委托给该接口调用目的是交给该接口的实现类即子类进行调用。2、Decorator抽象类的子类(具体装饰者)里面都有一个构造方法调用super(human),这一句就体现了抽象类依赖于子类实现即抽象依赖于实现的原则。因为构造里面参数都是Human接口只要是该Human的实现类都可以传递进去即表现出Decorator dt new Decorator_second(new Decorator_first(new Decorator_zero(human)));这种结构的样子。所以当调用dt.wearClothes();dt.walkToWhere()的时候又因为每个具体装饰者类中都先调用super.wearClothes和super.walkToWhere()方法而该super已经由构造传递并指向了具体的某一个装饰者类(这个可以根据需要调换顺序)那么调用的即为装饰类的方法然后才调用自身的装饰方法即表现出一种装饰、链式的类似于过滤的行为。3、具体被装饰者类可以定义初始的状态或者初始的自己的装饰后面的装饰行为都在此基础上一步一步进行点缀、装饰。4、装饰者模式的设计原则为对扩展开放、对修改关闭这句话体现在我如果想扩展被装饰者类的行为无须修改装饰者抽象类只需继承装饰者抽象类实现额外的一些装饰或者叫行为即可对被装饰者进行包装。所以扩展体现在继承、修改体现在子类中而不是具体的抽象类这充分体现了依赖倒置原则这是自己理解的装饰者模式。说的不清楚有些只可意会不可言传的感觉多看几遍代码然后自己敲出来运行一下基本上就领悟了。下面这个例子也有助于理解 装饰的流程和作用现在需要一个汉堡主体是鸡腿堡可以选择添加生菜、酱、辣椒等等许多其他的配料这种情况下就可以使用装饰者模式。汉堡基类(被装饰者相当于上面的Human)package decorator;public abstract class Humburger {protected String name ;public String getName(){return name;}public abstract double getPrice();}鸡腿堡类(被装饰者的初始状态有些自己的简单装饰相当于上面的Person)package decorator;public class ChickenBurger extends Humburger {public ChickenBurger(){name 鸡腿堡;}Overridepublic double getPrice() {return 10;}}配料的基类(装饰者用来对汉堡进行多层装饰每层装饰增加一些配料相当于上面Decorator)package decorator;public abstract class Condiment extends Humburger {public abstract String getName();}生菜(装饰者的第一层相当于上面的decorator_zero)package decorator;public class Lettuce extends Condiment {Humburger humburger;public Lettuce(Humburger humburger){this.humburger humburger;}Overridepublic String getName() {return humburger.getName() 加生菜;}Overridepublic double getPrice() {return humburger.getPrice()1.5;}}辣椒(装饰者的第二层相当于上面的decorator_first)package decorator;public class Chilli extends Condiment {Humburger humburger;public Chilli(Humburger humburger){this.humburger humburger;}Overridepublic String getName() {return humburger.getName() 加辣椒;}Overridepublic double getPrice() {return humburger.getPrice(); //辣椒是免费的哦}}测试类package decorator;public class Test {/*** param args*/public static void main(String[] args) {Humburger humburger new ChickenBurger();System.out.println(humburger.getName() 价钱humburger.getPrice());Lettuce lettuce new Lettuce(humburger);System.out.println(lettuce.getName() 价钱lettuce.getPrice());Chilli chilli new Chilli(humburger);System.out.println(chilli.getName() 价钱chilli.getPrice());Chilli chilli2 new Chilli(lettuce);System.out.println(chilli2.getName() 价钱chilli2.getPrice());}}输出鸡腿堡 价钱10.0鸡腿堡 加生菜 价钱11.5鸡腿堡 加辣椒 价钱10.0鸡腿堡 加生菜 加辣椒 价钱11.5作者jason0539
http://wiki.neutronadmin.com/news/35062/

相关文章:

  • 做语音聊天网站要多少钱三亚网站运营托管介绍
  • 怎么查询一个网站有没有做竞价swoole wordpress
  • 描述photoshop在网站建设中的作用与特点.设计师兼职平台
  • 网站权重收录官网推广方案seo
  • 建设厅教育培训网站小程序定制开发要多少钱
  • 郑州网站建设找三牛wordpress 3.8 问题
  • wordpress网站安全性发布产品的免费平台有哪些
  • 广州seo网站多少钱基于MVC网站建设课程设计报告
  • 网站吸引人的功能石家庄大型网络公司
  • 网站大全官网专门做鞋子的网站
  • 智慧团建信息系统网站登录手把手教你搭建自己的网站
  • dns解析失败登录不了网站WordPress中文企业免费主题
  • 中山网页建站模板深圳调查公司哪家好
  • 一家网站建设公司需要什么资质泰兴企业网站建设
  • 奢华网站模板网络架构设计方案
  • html5网站用什么软件做视频官方网站
  • 天津建设网站c2成绩查询易做文学网站的logo
  • 上海企业网站黄页网站模板怎么使用教程
  • 做盘石信用认证网站网站建设与管理找工作
  • 视频网站公共关系怎么做网站设计与网页制作模板
  • 建立网站网站建设的硬件支持
  • 梅州建设公司网站秦皇岛做网站的公司
  • 数据网站建设深圳市住建局工程交易服务网
  • 电子元件做的比较好的网站合肥建设厅官方网站
  • 做网站对于不同的分辨率西安建设科技专修学院官方网站
  • 做网站公司联系方式页面zh cn wordpress
  • 营销型网站的三元素网站建设深圳龙华
  • 企业网站推广哪个公司好中山网站开发招聘
  • 营销型网站建设与网盟空间中国网站
  • c#网站开发模板简历免费模板