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

学习做网站只学过c百度智能创作

学习做网站只学过c,百度智能创作,网站中的图片必须用 做吗,多媒体设计制作公司北京目录 一、定义二、结构三、优点四、使用场景五、代码示例六、截图示例 一、定义 1.在不改变现有对象结构的情况下,动态给该对象添加额外功能的模式 2.类B继承于类A,并将类A作为B类的属性(B类聚合A类) 3.BufferedInputStream、Buff…

目录

        • 一、定义
        • 二、结构
        • 三、优点
        • 四、使用场景
        • 五、代码示例
        • 六、截图示例

一、定义

  • 1.在不改变现有对象结构的情况下,动态给该对象添加额外功能的模式
  • 2.类B继承于类A,并将类A作为B类的属性(B类聚合A类)
  • 3.BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter都用到了装饰者模式

二、结构

  • 1.抽象构件角色(Component):定义一个抽象接口以规范准备接收附加责任的对象
  • 2.具体构件角色(Concrete Component):实现抽象构件,通过装饰角色为其添加一些职责
  • 3.抽象装饰角色(Decorator):继承或实现抽象构件,并包含具体构件的实例,可以通过其子类扩展具体构件的功能
  • 4.具体装饰角色(ConcreteDecorator):实现抽象装饰的相关方法,并给具体构件对象添加附加的责任

三、优点

  • 1.装饰者模式可以带来比继承更加灵活性的扩展功能,使用更加方便,可以通过组合不同的装饰者对象来获取具有不同行为状态的多样化结果
  • 2.装饰者模式比继承更具良好的扩展性,完美的遵循开闭原则,继承是静态的附加责任,装饰者则是动态的附加责任
  • 3.装饰类和被装饰类可以独立发展,不会互相耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能

四、使用场景

  • 1.当不能采用继承的方式对系统进行扩充或者采用继承不利于系统扩展和维护时
  • 2.不能采用继承的情况主要有两类:1.系统中存在大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长;2.类定义不能被继承(例如被final修饰的类)
  • 3.在不影响其它对象情况下,以动态、透明的方式给单个对象添加职责
  • 4.当对象的功能要求可以动态添加,也可以动态撤销时

五、代码示例

package com.learning.decorator;import lombok.AllArgsConstructor;
import lombok.Data;/*** 抽象构件角色* 快餐类*/
@Data
@AllArgsConstructor
public abstract class FastFood {// 价格private float price;// 名称private String name;public abstract float cost();public void printFastFood(){System.out.println(this.getName() + " " + this.cost());}
}
package com.learning.decorator;/*** 炒饭类* 具体构件角色*/
public class FriedRice extends FastFood{public FriedRice(){super(10, "炒饭");}@Overridepublic float cost() {return getPrice();}
}
package com.learning.decorator;/*** 炒面类* 具体构件角色*/
public class FriedNoodles extends FastFood{public FriedNoodles(){super(12, "炒面");}@Overridepublic float cost() {return getPrice();}
}
package com.learning.decorator;import lombok.Getter;
import lombok.Setter;/*** 装饰者类* 抽象装饰者角色*/
@Setter
@Getter
public abstract class Garnish extends FastFood{// 声明快餐类的变量private FastFood fastFood;public Garnish(FastFood fastFood, float price, String name) {super(price, name);this.fastFood = fastFood;}
}
package com.learning.decorator;/*** 鸡蛋类* 具体的装饰者角色*/
public class Egg extends Garnish{public Egg(FastFood fastFood){super(fastFood, 1, "鸡蛋");}@Overridepublic float cost() {// 计算价格return getFastFood().cost() + this.getPrice();}@Overridepublic String getName() {return super.getName() + getFastFood().getName();}
}
package com.learning.decorator;/*** 培根类* 具体的装饰者角色*/
public class Bacon extends Garnish{public Bacon(FastFood fastFood){super(fastFood, 1, "培根");}@Overridepublic float cost() {// 计算价格return getFastFood().cost() + this.getPrice();}@Overridepublic String getName() {return super.getName() + getFastFood().getName();}
}
package com.learning.decorator;public class Client {public static void main(String[] args) {FastFood fastFood = new FriedRice();// 点一份炒饭fastFood.printFastFood();// 炒饭中添加鸡蛋fastFood = new Egg(fastFood);fastFood.printFastFood();// 鸡蛋炒饭中加培根fastFood = new Bacon(fastFood);fastFood.printFastFood();// 再加一个鸡蛋fastFood = new Egg(fastFood);fastFood.printFastFood();}}

六、截图示例

在这里插入图片描述

http://www.yayakq.cn/news/821814/

相关文章:

  • 群晖nas建设网站wordpress摄影社
  • 网站和app可以做充值余额功能wordpress自定义文章类型分类模板
  • 西宁网站建设建站做网站后台需要学什么
  • 北京网络网站推广三亚官方网站建设
  • 找公司做网站运营怎么样西安搜索引擎优化
  • 寿光shengkun网站建设网站优化建设深圳
  • 广州市网站公司福州专业网站营销
  • 建设图书馆网站的意义wordpress首页布局插件
  • 手机网站关键词优化莱芜百度网站制作
  • vs网站开发教程泌阳专业网站建设
  • django 做网站赚钱软件培训方案
  • 做国内第一游戏数据门户网站济南网站建设工作室
  • 怎么样做搜索引擎网站网站k
  • 2015做哪些网站能致富朝阳网络推广
  • 阿里巴巴网站本土化建设trinseo公司
  • 辽阳微网站建设wordpress彩票
  • 网上怎么做网站赚钱网页如何制作网站
  • 展示型网站建设商丘网站建设商丘
  • 想找公司做网站网络推广公司如何做
  • 河北三河建设厅网站竞网网站建设
  • 郑州网站建设方案一般做网站都在什么网做
  • 潍坊企业网站模板建站移动端h5网站开发服务
  • 国外 创意 网站网站建设技术人员要会什么
  • 开发软件的网站平台个人网站设计
  • 电脑网站做名片用dw个人网站怎么做
  • 网站建设到本地h5制作官网
  • 影楼做网站休闲旅游产品营销网站的建设策略
  • 安阳做网站哪里好互联网建设与管理
  • 网站建设公司新员工培训ppt模板网站建设需要注意问题
  • 免费网站建站平台企业网站备案要多久