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

广东建设网官网武汉seo推广

广东建设网官网,武汉seo推广,中国建设银行互联网网站,昆山品牌网站装饰模式 为了不改变组件的结构,动态地扩展其功能。 通常,扩展功能通过子类进行,但是继承的方式具有静态特征,耦合度高。 意图:动态地给对象添加额外的功能 主要解决:继承方式是静态特征,扩…

装饰模式

为了不改变组件的结构,动态地扩展其功能。

通常,扩展功能通过子类进行,但是继承的方式具有静态特征,耦合度高。

意图:动态地给对象添加额外的功能

主要解决:继承方式是静态特征,扩展的功能多的时候,子类会太膨胀

何时使用:不想增加很多子类的时候扩展类

1 假设情景

一个宝可梦,可以睡觉,吃饭,放技能;如果要扩展它的行为,比如Mega进化后,假设有专属的Mega技能,然后极巨化,可以放极巨技能。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GEpCBSms-1692547639876)(D:\笔记笔记笔记\设计模式.assets\image-20230820205126538-16925358896261.png)]

宝可梦接口:抽象组件(Component)

public interface Pokemon {void sleep();void eat();void spell();
}

**宝可梦实现类:**具体组件(Concrete Component)

有皮卡丘和菊草叶两种实现类,作为具体的组件

public class Pikachu implements Pokemon{@Overridepublic void sleep() {System.out.println("Pikachu is sleeping...");}@Overridepublic void eat() {System.out.println("Pikachu is eating...");}@Overridepublic void spell() {System.out.println("Pikachu is spelling...");}
}public class Chikorita implements Pokemon{@Overridepublic void sleep() {System.out.println("Chikorita is sleeping...");}@Overridepublic void eat() {System.out.println("Chikorita is eating...");}@Overridepublic void spell() {System.out.println("Chikorita is spelling...");}
}

**宝可梦变化装饰器:**抽象装饰(Decorator)

用抽象类方便扩展多种装饰,以应对宝可梦可能有的多种变化

abstract class PokemonDecorator implements Pokemon{Pokemon pokemon;public PokemonDecorator(Pokemon pokemon) {this.pokemon = pokemon;}@Overridepublic void sleep() {pokemon.sleep();}@Overridepublic void eat() {pokemon.eat();}@Overridepublic void spell() {pokemon.spell();}
}

**宝可梦具体变化:**具体装饰(Concrete Decorator)

实现了Mega进化和极巨化两种变化

public class MegaPokemon extends PokemonDecorator{public MegaPokemon(Pokemon pokemon) {super(pokemon);}public void megaSpell(){super.spell();System.out.println("Mega Power!");}
}public class DymaxPokemon extends PokemonDecorator{public DymaxPokemon(Pokemon pokemon) {super(pokemon);}public void dymaxSpell(){super.spell();System.out.println("Dymax Power!");}
}

测试类

public class DecoratorDemo {public static void main(String[] args) {Pokemon chikorita = new Chikorita();Pikachu pikachu = new Pikachu();DymaxPokemon dymaxPikachu = new DymaxPokemon(pikachu);MegaPokemon megaPikachu = new MegaPokemon(pikachu);MegaPokemon megaChikorita = new MegaPokemon(chikorita);pikachu.spell();dymaxPikachu.dymaxSpell();megaPikachu.megaSpell();megaChikorita.megaSpell();}
}
Pikachu is spelling...
Pikachu is spelling...
Dymax Power!
Pikachu is spelling...
Mega Power!
Chikorita is spelling...
Mega Power!

至此,再回头看是否实现我们的意图:动态地给一个对象添加一些额外的职责。

2 吐槽

本来宝可梦只有吃饭睡觉放技能,但是随着版本更迭,宝可梦还增加了Mega进化,极巨化,在不用子类扩展的情况下,可以使用装饰模式,当需要扩展新功能的时候,比如在朱紫版本增加了太晶化,我们只需要新写一个PokemonDecorator的子类CrystalPokemon,实现新功能(不还是用子类扩展了吗。。。),所以装饰模式的缺点就是:装饰类太多的时候比较复杂(。。。)

http://www.hrbkazy.com/news/8479.html

相关文章:

  • 沈总网站建设深圳seo推广
  • 泊头那家做网站磁力链
  • 深圳市建设工程交易中心网站seo关键词排名技术
  • 江门北京网站建设推广计划书范文
  • 网络私人定制网站seo建站网络公司
  • 网站制作难吗推广app用什么平台比较好
  • 做啥类型网站华为手机网络营销策划方案
  • 福州网站建设免费咨询最近新闻热点国家大事
  • 北海网站建设公司百度指数快刷软件
  • 为什么打开Wordpress很慢seo推广的方法
  • 做网站需要空间跟域名吗苹果cms播放器
  • 简单的app开发免费网站排名优化软件
  • 学术网站建设在线企业管理培训课程
  • 普陀区建设工程质检网站seo诊断优化专家
  • 网站建设部门宣言百度推广电话号码
  • 网站建设买什么书北京网站优化对策
  • 深圳网络推广顾问百中搜优化
  • 什么颜色做网站显的大气福州短视频seo方法
  • 响应式网站尺寸百度网盘搜索引擎入口哪里
  • oss做静态网站珠海seo排名收费
  • 广东网站建设定制百度联盟项目看广告挣钱
  • 做网站开发怎么接单北京seo服务商找行者seo
  • 怎么样自己做百度网站海淀区seo全面优化
  • 广东省住房和城乡建设局网站seo服务是什么
  • 企业网站如何设计网页网络营销方法有哪些
  • 找网站建设客户网站seo关键词
  • 接单做公司网站站群什么是搜索引擎优化的核心
  • 做网站的人跑了网站可以恢复吗杭州网络排名优化
  • 十大免费ppt网站软件开发网站建设
  • 重庆模板建站代理网上教育培训机构哪家好