装饰者模式 我就是我 2022-05-11 14:12 233阅读 0赞 # 装饰者模式: # ### 动态的将责任附加到对象上.若要扩展功能,装饰者提供了比继承更加有弹性的代替方案 ### ## 继承和组合的区别: ## ### 继承: ### ### 使用继承,可以使子类在拥有自身方法的同时,还可以拥有父类的方法. ### ### 继承是静态的,在编译的时候就已经决定子类的行为,我们不便于控制增加行为的方式和动机. ### ### 组合: 将一个对象嵌入到另一个对象中,由另一个对象来决定是否引用该对象来扩展自己的行为. ### ### 这是一种动态的方式,我们可以在应用程序中动态控制 ### ### 组合优缺点: ### ### 优点: 不会破坏类的封装性,且具有较好的松耦合性,可以是系统更加容易维护 ### ### 缺点: 要创建比继承更多的对象 ### ### 装饰者模式的优缺点: ### ### 优点: ### ### 1.装饰者模式可以提供比继承更多的灵活性 ### ### 2.可以通过一种动态的方式来扩展一个对象的功能,在运行时选择不同的装饰器, ### ### 从而实现不同的行为 ### ### 3.通过使用不同的具体装饰类以及这些装饰类的排列组合, ### ### 可以创造出很多不同行为的组合。 ### ### 可以使用多个具体装饰类来装饰同一对象,得到功能更为强大的对象。 ### ### 4.具体构件类与具体装饰类可以独立变化, ### ### 用户可以根据需要增加新的具体构件类和具体装饰类,在使用时再对其进行组合, ### ### 原有代码无须改变,符合“开闭原则”。 ### ### 缺点: ### ### 1.会产生很多的小对象,增加系统的复杂性 ### ### 2.装饰者比继承更加容易出错,排错也比较很困难. ### ### 对于多次装饰的对象,调试时寻找错误可能需要逐级排查,比较繁琐 ### ### 装饰者模式的使用场景: ### ### 1.在不影响其它对对象的情况下,以动态,透明的方式给单个对象增加职责 ### ### 2.需要动态的给一个对象增加功能,这些功能也可以动态的被撤销 ### # 实例: # ## StoreInter ## public interface Store { public abstract void sellFreshMeat(); } ## MeatStore.java ## public class MeatStore implements Store { @Override public void sellFreshMeat() { System.out.println("卖新鲜大肉"); } } ## SellCook.java ## public class SellCook implements Store { private Store store; @Override public void sellFreshMeat() { store.sellFreshMeat(); } //构造方法 public SellCook(MeatStore mStore) { this.store = mStore; } public void sellCook() { System.out.println("卖烹饪肉"); } } ## Test.java ## public class Test { @org.junit.Test public void test() { MeatStore mStore = new MeatStore(); // meatStore.sellFreshMeat(); SellCook cook = new SellCook(mStore); cook.sellFreshMeat(); cook.sellCook(); } }
相关 装饰者模式 《Head First Design Patterns》装饰者模式学习练习: 装饰者模式我们常见的Demo:文件读写io时候,会有InputStream,FileInputS 小灰灰/ 2022年07月13日 02:58/ 0 赞/ 110 阅读
相关 装饰者模式 package C\_Decker; /\\ \ 设计原则:类应该对扩展开放,对修改关闭。 \ 装饰者模式:动态地将责任和行为附加到对象上。若要扩展功能,装饰者提供了 骑猪看日落/ 2022年07月12日 12:17/ 0 赞/ 209 阅读
相关 装饰者模式 1.定义: 装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。使用Decorator模式相比用 快来打我*/ 2022年06月05日 06:14/ 0 赞/ 194 阅读
相关 装饰者模式 引言 还是以热干面,加鸡蛋的热干面,加牛肉的热干面举例子 代码如下 1.先创建一个面条的接口 public interface Noodle { 朴灿烈づ我的快乐病毒、/ 2022年05月26日 10:52/ 0 赞/ 180 阅读
相关 装饰者模式 作用:可以给一个对象添加职责,可以用来扩展,比继承更有弹性。 装饰者模式 Decorator模式(别名Wrapper):动态将职责附加到对象上 蔚落/ 2022年05月25日 07:49/ 0 赞/ 187 阅读
相关 装饰者模式 装饰者模式有一个设计非常巧妙的结构,可以为对象动态添加功能。在基本的设计原则中,有一个重要的原则叫做合成/聚合复用原则。根据该原则的思想,代码复用应该尽可能使用委托,而不是继承 红太狼/ 2022年05月14日 02:50/ 0 赞/ 215 阅读
相关 装饰者模式 装饰者模式: 动态的将责任附加到对象上.若要扩展功能,装饰者提供了比继承更加有弹性的代替方案 继承和组合的区别: 继承: 我就是我/ 2022年05月11日 14:12/ 0 赞/ 234 阅读
相关 装饰者模式 TB - top bottom(自上而下) BT - bottom top(自下而上) RL - right left(从右到左) LR - left 亦凉/ 2022年02月18日 11:23/ 0 赞/ 222 阅读
相关 装饰者模式 装饰者模式,在不改变一个对象本身功能的基础上给对象增加额外的新行为。比如,我们到书店买书,在不改变书籍本身的基础上,赠送个书签,或者要个包装袋 装饰者模式(Decora 谁践踏了优雅/ 2021年12月03日 15:25/ 0 赞/ 359 阅读
相关 装饰者模式 一 点睛 我们先来看一个快餐店的例子。 快餐店有炒面、炒饭这些快餐,可以额外附加鸡蛋、火腿、培根这些配菜,当然加配菜需要额外加钱,每个配菜的价钱通常不太一样,那么计算 悠悠/ 2021年07月24日 19:11/ 0 赞/ 393 阅读
还没有评论,来说两句吧...