读《大话设计模式》学习小结(一)装饰器模式

来源:互联网 发布:美工包括哪些 编辑:程序博客网 时间:2024/06/05 15:46

前言,作为个人总结设计模式学习的第一篇文章,我们先说点别的。设计模式在早以前我就有在看,并且部分模式也做了对应的总结。故前三、四篇的内容将是我之前做的总结,现在放到博客上。或许是因为看《大话设计模式》而做总结的原因,自身也受其影响,在总结中也会带有些生活的元素。此外,我还会配上自己写的实例代码,以方便理解。有心的读者希望也能多写写代码,设计模式,只有到你遇到相应的问题及环境时才会觉得它的好处。

此文及同系列设计模式小结文章面向的读者:该领域的萌新。因为,此处的小结是学习小结,一个比较概述的个人理解。用我的方式让你了解它,所以可能也未及全面。有深入探究兴趣的伙伴请直接读原书籍《大话设计模式》。

小小的感言,《大话设计模式》一书我是读完了的,当然后半部分看得比较快。这第一遍看完后我并没有感觉自己学会了如何使用多少设计模式。我学到的更多的是有这么些设计模式,它们可以用于什么场景。还有我认为更重要的,蕴含在设计模式中的核心(我认为的核心):抽象思维、减少重复代码的思维。然后的话,目前我仅对我认识比较深及平时接触多的设计模式作总结,也就是不会把20多个设计模式都立马都写一遍。而且感觉自己写的代码还不够多,没遇到对应的场景,就没有相应的体会。有想法的设计模式再写进博客吧。

废话扯了一大车,正文开始。

装饰器模式:抽象核心职责,使用继承,通过子类对父类方法的“装饰”(方法重写,保留父类行为并增加其他装饰功能),动态地为父类添加其他职责、行为。

还是课堂上那个熟悉的“汉堡”:public abstract class Component {//抽象的汉堡    abstract void operation();}public class ConcreteComponent extends Component{//具体的汉堡@Overridevoid operation() {System.out.println("汉堡来了");}}public abstract class Decorator extends Component{//抽象的装饰器protected Component component = null;public void decorator(Component component){//装饰方法this.component = component;}@Overridevoid operation() {if(component != null){component.operation();}}}public class ConcreteDecoratorA extends Decorator{//具体的装饰器A,负责加鸡腿@Overridevoid operation() {addDrumstick();//加鸡腿        super.operation();}void addDrumstick(){System.out.print("鸡腿");}}public class ConcreteDecoratorB extends Decorator{//具体的装饰器B,负责加芝士@Overridevoid operation() {        addCheese();//加芝士        super.operation();}void addCheese(){System.out.print("芝士");}}public class ConcreteDecoratorC extends Decorator{//具体的装饰器C,负责加点其他的private String chili = null;public void setChili(String chili){this.chili = chili;} @Overridevoid operation() {System.out.print(chili);//加点其他的        super.operation();}}public class Client {    public static void main(String[] args){        //开店准备,备好鸡腿、芝士、辣椒酱    ConcreteDecoratorA concreteDecoratorA = new ConcreteDecoratorA();    ConcreteDecoratorB concreteDecoratorB = new ConcreteDecoratorB();    ConcreteDecoratorC concreteDecoratorC = new ConcreteDecoratorC();        //开门迎客,服务员:欢迎来到汉堡店,您需要点什么?        //客人:    //给我来一个汉堡    ConcreteComponent hbgA = new ConcreteComponent();        //要有鸡腿    concreteDecoratorA.decorator(hbgA);        //要有芝士    concreteDecoratorB.decorator(concreteDecoratorA);        //放点辣椒酱    concreteDecoratorC.setChili("加辣的");    concreteDecoratorC.decorator(concreteDecoratorB);        //服务员:您点的第一个汉堡    concreteDecoratorC.operation();        //客人:    //一个不够,再来一个    ConcreteComponent hbgB = new ConcreteComponent();        //这个简单点就好,有芝士就行    concreteDecoratorB.decorator(hbgB);        //服务员:您点的第二个汉堡    concreteDecoratorB.operation();    }}


输出:

加辣的芝士鸡腿汉堡来了
芝士汉堡来了



原创粉丝点击