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

58同城网招聘招聘seo自动排名软件

58同城网招聘招聘,seo自动排名软件,做网站用矢量图还是位图,深圳网站建设公装饰模式 装饰模式角色案例装饰模式与静态代理的区别 装饰模式 允许向一个现有的对象动态地添加新的功能,同时不改变其结构。它是继承的一种替代方案,可以动态地扩展对象。有点像静态代理 角色 装饰者模式有四种角色 抽象被装饰者,被装饰者…

装饰模式

  • 装饰模式
    • 角色
    • 案例
    • 装饰模式与静态代理的区别

装饰模式

允许向一个现有的对象动态地添加新的功能,同时不改变其结构。它是继承的一种替代方案,可以动态地扩展对象。有点像静态代理

角色

装饰者模式有四种角色 抽象被装饰者,被装饰者,装饰者和抽象被装饰者

  • 抽象被装饰者:一般是一个接口,包含需要被装饰的方法
  • 被装饰者:实现 抽象被装饰者 接口,代表被装饰的原始对象。
  • 抽象装饰者:继承或实现抽象被装饰者,内部含有一个 抽象被装饰者的属性,调用或增强 被装饰者的方法
  • 装饰者:实现抽象装饰者的方法,给被装饰对象增加具体的职责

案例

今天不开包子店,想开一家奶茶店。产品有普通奶茶,为了奶茶种类丰富,需要支持添加多种小料,椰果,芋圆等,且可以自由组合。
根据要求,先建立起基础类
接口 Tea,用来表示 抽象被装饰类,MilkTea 用来表示 被装饰类

/*** 抽象被装饰者**/
public interface Tea {String getName();int getPrice();
}
/*** 被装饰者:奶茶**/
public class MilkTea implements Tea{@Overridepublic String getName() {return "奶茶";}@Overridepublic int getPrice() {return 10;}
}

分析下问题,想要支持可以自由组合的方式来 增强奶茶类,普通的继承和组合 很难实现。所以才使用装饰者模式
下面是装饰者的代码

/*** 抽象装饰者:奶茶小料**/
public abstract class AbsDecoratorIngredients implements Tea{final private Tea tea;public AbsDecoratorIngredients(Tea tea) {this.tea = tea;}@Overridepublic int getPrice() {//执行目标对象原本的行为return tea.getPrice();}@Overridepublic String getName() {//执行目标对象原本的行为return tea.getName();}
}
/*** 装饰者:椰果**/
public class DecoratorCoconut extends AbsDecoratorIngredients{public DecoratorCoconut(Tea tea) {super(tea);}@Overridepublic int getPrice() {/*被装饰者的价格 + 当前椰果的价格*/return super.getPrice() + 2;}@Overridepublic String getName() {return super.getName() + " + " + "椰果";}
}
/*** 装饰者:芋圆**/
public class DecoratorTaroBall extends AbsDecoratorIngredients{public DecoratorTaroBall(Tea tea) {super(tea);}@Overridepublic int getPrice() {/*被装饰者的价格 + 当前椰果的价格*/return super.getPrice() + 2;}@Overridepublic String getName() {return super.getName() + " + " + "椰果";}
}

测试代码:

public class DecoratorTest {public static void main(String[] args) {/*给我一杯奶茶*/System.out.println("==========================给我一杯奶茶====================================");Tea milkTea = new MilkTea();System.out.println(milkTea.getName() + " = " + milkTea.getPrice());/*给我一杯珍珠奶茶*/System.out.println("===========================给我一杯珍珠奶茶===================================");milkTea = new DecoratorTaroBall(milkTea);System.out.println(milkTea.getName() + " = " + milkTea.getPrice());/*给我一杯珍珠椰果奶茶*/System.out.println("============================给我一杯珍珠椰果奶茶==================================");milkTea = new DecoratorCoconut(milkTea);System.out.println(milkTea.getName() + " = " + milkTea.getPrice());}
}输出:
==========================给我一杯奶茶====================================
奶茶 = 10
===========================给我一杯珍珠奶茶===================================
奶茶 + 椰果 = 12
============================给我一杯珍珠椰果奶茶==================================
奶茶 + 椰果 + 椰果 = 14

在这里插入图片描述

看到这里,可能有人发现 抽象装饰者类 好像可以省略。
是的,这个例子是可以省略的,
这里只是写的 装饰者模式的标准写法。使用一个抽象装饰者 是为了 将 抽象被装饰者 和 装饰者 解耦。

一旦把 抽象装饰者省略,大家可能发现这个写法是不是很眼熟,是不是很像 静态代理。
其实 设计模式 就是这样,23种设计模式只是应对不同的场景,不同的设计模式总会有相似之处。
设计模式来源于设计原则,万变不离其宗,稍微变换下就是另一种设计模式。

下面看下 装饰和静态代理的区别

装饰模式与静态代理的区别

装饰模式:目标对象由外界传入,目的是为了增强该对象
静态代理:目标对象由内部生成,目的是隐藏和保护该对象
装饰模式一般会迭代传入不同的对象,一步一步的增强方法
静态代理一般只传入一个对象,只调用一层

http://www.shuangfujiaoyu.com/news/45117.html

相关文章:

  • 上海中学门户网站登陆长治seo顾问
  • 信息网站设计方案今天的新闻联播
  • 青岛专业网站建设seo怎么优化排名
  • 做郑州的购物网站用什么名竞价托管
  • 整形医院网站建设成都seo工程师
  • 做酒店网站所用到的算法成都网站优化seo
  • 全国高校校园网站联盟建设品牌营销策划十大要点
  • 贵州 政府网站建设规范seo排名赚能赚钱吗
  • wordpress 2栏主题seo策略主要包括
  • 专业网站运营托管百度资源提交
  • 小型企业网站建设旅游景点网论文新平台推广赚钱
  • 河北省网站备案网络营销品牌公司
  • 网站建设模板一次收费微信管理助手
  • 湖南省建设银行网站6互联网运营自学课程
  • 欧 美 做 爱 视频网站哪个浏览器不屏蔽网站
  • 首饰网站建设策划案句容市网站seo优化排名
  • seo整站优化服务抖音搜索优化
  • 手机网站制作与建设网站关键词优化报价
  • 建站公司哪家做出来的网站好国际新闻直播
  • 多用户版商城系统信息流优化师面试常见问题
  • 网站开发视频教程百度云做营销怎样才能吸引客户
  • 哪些网站是用响应式做的seo网站优化价格
  • 做设计网站的工作内容深圳网络营销外包公司推荐
  • 亦庄网站开发百度关键词推广多少钱
  • 印章生成器网站优化方案怎么写
  • 台州建设网站如何做好产品网络推广
  • 人力资源六大模块中国网络优化公司排名
  • 无极网站设计市场调研数据网站
  • 网上建立公司网站nba排名2021最新排名
  • 铁岭 建筑公司网站 中企动力建设广州百度竞价开户