一、设计原则

1、单一职责

一个类,只有一个引起它变化的原因,应该只有一个职责;类的职责越少,对象之间的依赖关系就越少,耦合度就越弱,受其他对象的牵制和约束就越少,从而保证了系统的可扩展性。

2、里氏替换原则

所有引用基类的地方必须透明的使用其子类对象,反之则不行。即:在代码中只要父类能出现的地方,子类就能出现,这就要求子类必须具备基类的全部接口,但子类可以有自己的个性。
应用:1)在编译期,Java 语言编译器会检查一个程序是否符合里氏替换原则。
2)当多个类之间存在继承关系时,通常使用父类或接口来指向子类的对象。
继承的优点:代码共享,减少创建子类的工作量,提高可扩展性和可复用性;
继承的缺点:入侵式、降低了灵活性、耦合;
体现里氏替换原则的设计模式:策略模式、组合模式、代理模式

3、依赖倒置原则

高层模块不应该依赖低层模块,两者都应该依赖其抽象,抽象不依赖细节。
例:司机只要会开车,就可以开奔驰车,也可以开宝马车。因此司机不依赖于奔驰车或宝马车。
应用:接口负责定义抽象方法,并且声明与其他对象的依赖关系,抽象类负责公共构造部分的实现,实现类准确地实现业务逻辑,同时在适当的时候对父类进行细化。
要求:
1)每个类都应该有接口或抽象类,或者抽象类和接口两者都具备
2)变量的表面类型最好是接口或者抽象类

优点:可使节后或抽象类对实现类进行约束,从而减少需求变化引起的工作量剧增的情况。
注:?依赖倒置原则没有实现,就不能实现对扩展开放,对修改关闭,是实现开闭原则的重要途径。

4、接口隔离原则

什么是接口?
实例接口(Object Interface)、类接口(Class Interface)
含义:
1)一个类对另一个类的依赖性应当是建立在最小的接口上;
2)一个接口代表一个角色,不应当将不同的角色都交给一个接口;
3)不应该强迫客户依赖它们不用的方法,否则会面临不使用的方法的改变带来的改变;
应用:一个接口只对一个子模块或者业务逻辑进行服务
优点:带来了设计的灵活性,降低了整个项目的风险。

5、迪米特法则

又叫最少知识原则,即一个对象应当对其他对象尽可能少的了解。
表述:只和朋友通信,不和陌生人说话

6、开闭原则

对扩展开放,对实体关闭。
表述:在设计一个模块的时候,这个模块可以在不被修改的前提下被扩展,即不必修源代码的情况下改变这个模块的行为。
主要性:提高复用性、提高可维护性、提高灵活性、易于测试。
开闭原则坚决问题的关键在于抽象化,把系统所有可能的行为抽象成为一个抽象底层,这个抽象底层规定出所有的具体实现必须提供的方法的特征,给系统定义出一个一劳永逸、不再更改的抽象设计,此设计允许有无穷尽的行为在实现层实现。
开闭原则是面向对象设计的终极目标,其他设计原则都可视为开闭原则的实现方法。

二、创建型模式

1、单例模式

确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例

java中体现:
1)饿汉模式:类加载时,就进行对象实例化
2)懒汉模式:第一次引用类时,才进行实力化
优点:
1)当一个对象需要频繁创建、销毁时,使用单例可以减少内存开销
2)当一个对象需要比较多的资源,如读取配置、产生其他依赖对象时,减少性能开支
3)避免对资源的多重占用,例如:写文件动作
缺点:
1)单例模式无法创建子类,扩展困难,除非修改代码
2)单例模式与单一原则有冲突,是否用单例取决于业务逻辑
Spring框架每个Bean默认就是单例的;java基础类库的Runtime类也采用了单例模式

2、工厂方法模式

定义一个用于创建对象的接口,让子类去决定实例化那个类。工厂方法使一个类的实例化延迟到其子类。

优点:
1)封装性好,如果一个类的调用者需要一个具体的产品对象,只需要这个产品的类名或者约束字符串,不用知道创建对象的过程如何,降低了模块间耦合。
2)扩展性好
3)屏蔽产品类,即不用关心产品类是如何变化的
4)是典型的解耦框架,高层模块只需要知道产品的抽象类,其他的实现类都不用关心。符合:迪米特法则、依赖倒置原则、里氏替换原则。

3、抽象工厂模式

为创建一组相关或相互依赖的对象提供一个接口,而无需指定他们的具体类。

优点:如果产品族中只有一种产品,则抽象工厂模式就退化为工厂方法模式。产品族内的约束为非公开状态,在不同的工厂汇中,各种产品可能具备不同的相互依赖关系,这些依赖关系是由工厂封装在其内部,对于工厂的使用者是不可见的;生产线扩张非常容易,如果要针对同一产品族建立新的生产线,只需要实现产品族中的所有接口并建立新的工厂类即可。
缺点:产品族本身扩展非常困难,如果需要在产品族中增加一个新的产品类型,则需要修改多个接口,并且会影响已有的工厂类。

4、建造者模式(生成器模式)

将一个复杂对象的构建和他的表示分离,使得同样的构建过程可以创建不同的表示。

优点:
1)封装性,客户端不必知道产品内部组成的细节;
2)建造者独立,容易扩展;
3)便于控制细节风险,由于具体的建造者时独立的,因此可以对建造过程逐步细化,而不对其他模块产生影响。
适用场景:(建造者模式关注的是零件顺序和装配工艺顺序)
1)相同的方法,不同的执行顺序,产生了不同的结果时;
2)多个部件或零件装配到一个对象中产生的运行结构不同时;

5、原型模式

用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。

三、结构型模式

通过组合类或者对象产生更大的结构来适应更高层次的逻辑需求。

1、代理模式

为其他对象提供一种代理来控制对该对象的访问

代理模式:远程代理、虚拟代理、保护代理、缓存代理、同步代理
、智能引用代理
优点:职责清晰、高扩展性、智能化

2、装饰模式

动态地给一个对象添加一些额外的职责。

使用场景:
1)需要扩展一个类的功能的,或给一个类增加附加功能
2)需要动态的给一个对象增加功能,这些功能可以再动态的撤销
3)需要为一批类进行改装或加装功能

思考:代理模式和装饰模式的区别:
代理模式是关于被代理类构造层面的前后处理,而装饰模式关注的是具体方法即业务本身的扩展。

3、适配器模式

将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。


简述:通过适配器实现接口的某个方法来调用父类的方法,从而使得所谓的两个类在一起工作。

4、组合模式

也称合成模式,用来描述部分与整体的关系。将对象组合成树形结构以表示“部分——整体”的层次结构,使得用户对耽搁对象和组合对象的使用具有一致性。

优点:
1)高层模块调用简单,简化了高层模块的代码
2)节点自由增加
缺点:
1)不易控制树枝构件的类型
2)不易使用继承的方法来增加新的行为
使用场景:
1)需要描述的对象的部分和整体的等级结构,如树形菜单、文件和文件夹管理
2)需要客户端忽略个体构件和组合构件的区别,平等的对待所有控件

5、桥梁模式

将抽象和实现解耦,使得两者可以独立的变化。

优点:
将抽象和实现分离,实现不受抽象的约束。因为实际实例化的抽象是‘修正抽象’,解决继承的缺点,即子类过于受父类约束。
1)抽象和实现分离是桥梁模式的主要特点,是为了解决继承的缺点而提出的设计模式。
2)实现对客户透明,客户端不用关心细节实现,它已经由抽象层通过聚合关系完成了封装。
使用场景:
1)不希望或不适合使用继承的场景。继承具有强入侵性,即父类有的方法。子类必须有;而桥梁模式是弱关联关系。
2)一个构件有多于一个的抽象化角色和实现化角色,系统需要他们之间进行动态耦合。
例:

6、外观模式

要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。外观模式提供一个高层次的接口,使得子系统更易用。

优点:
1)减少系统的相互依赖,所有依赖都是对facade对象的依赖,与子系统无关
2)提高灵活性,不管子系统内部如何变化,只要不影响facade对象,任何活动都是自由的
3)提高安全性,facade中未提供的方法,外界就无法访问,提高系统的安全性
缺点:不符合开闭原则,对修改开开放,对扩展关闭。

例:

7、享元模式

享元模式是实现池技术的重要实现方式,使用共享对象可有效地支持大量的细粒度的对象

优点:大量减少内存中对象的数量,降低程序内存的占用,提高性能。
缺点:增加了系统的复杂性
应用场景:
1)系统中有大量的相似对象,这些对象耗费大量的内存
2)需要缓存池的场景
java基础类库中大量使用了享元模式,如:String、Integer等类都通过享元模式提供了内部的池化机制。(不是很好理解)
查看Interger源码得知:在使用Integer时,创建了一个最大最小值是-127128的cache[]数组(最大值可在JVM中设置),并且创建了-128127所有int对应的interger对象并缓存起来,每次使用Integer.valueOf(Int)时都会直接总cache[]中读取,如果大于127
才去创建新的integer,否则直接拿缓存的。

例:即细粒度的对象要有内部的方法,和对外暴露的属性(可以定义为类自己的一个成员变量)

四、行为型模式

行为型模式是对不同对象之间划分责任和算法的抽象化。

1.模板方法模式

定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可以重定义该算法的某些特定步骤。

优点:
1)封装不变的部分,扩展可变的部分。不变的部分封装到父类中实现,而可变部分则可以通过集成尽扩展。
2)提取公共的代码防雨父类,便于维护。
3)行为由父类控制,子类实现。模板方法中的基本方法是由子类实现的,因此子类可以通过扩展响应的功能,复合开闭原则。
应用场景:
1)多个子类有公共方法,并且逻辑基本向相同时。
2)可以将重要的、复杂的、核心算法设计为模板方法,周边的相关细节功能由子类实现。
3)重构时,模板方法模式是一个经常使用的模式,将相同的代码抽取到父类中。

2. 命令模式

将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。

没太理解。
demo:
小女孩茱丽(Julia)有一个盒式录音机,此录音机有播音(Play)、倒带(Rewind)和停止(Stop)功能,录音机的键盘便是请求者(Invoker)角色;茱丽(Julia)是客户端角色,而录音机便是接收者角色。Command类扮演抽象命令角色,而PlayCommand、StopCommand和RewindCommand便是具体命令类。茱丽(Julia)不需要知道播音(play)、倒带(rewind)和停止(stop)功能是怎么具体执行的,这些命令执行的细节全都由键盘(Keypad)具体实施。茱丽(Julia)只需要在键盘上按下相应的键便可以了。
录音机是典型的命令模式。录音机按键把客户端与录音机的操作细节分割开来。

优点:类间解耦,command扩展性强
缺点:会导致系统中出现过多的具体命令类。

3.责任链模式

使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象练成一条链,并沿着这条链传递该请求,直到有对象处理它为止。
简述:使用时创建两个对象A和B,将B设置给A的成员变量,A在处理请求时会先让自己的成员变量去处理,如果没有成员变量,则自己处理。

优点:
1)责任链模式将请求和处理分开,请求者不知道是谁在处理,处理者可以不知道请求的全貌
2)提高系统的灵活性
缺点:
1)降低程序的性能,链比较长时,性能会大幅度下降
2)不易于调试
demo:击鼓传花

4.策略模式

定义一组算法,将每个算法都封装起来,并且使他们之间可以互换。
简述:定义一个抽象类,抽象类中有某个算法,这个算法是交给子类实现的,使用时是实例化出实现了具体算法的子类,父类只是提供了公共的代码。
优点:
1)提供了管理相关的算法族的办法。使用继承让父类提供了公共代码,避免了代码重复。
2)算法或行为的使用者相互分离,可以独立演化。
3)避免了使用多种条件转移语句。
缺点:
1)客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
2)可能会造成很多个策略类。可以使用享元模式来减少对象的数量。

策略相比于继承有什么好处?
策略模式是将算法单独提出来作为一系列的类,这些类可以独立演化,如果使用继承关系,那么派生的子类算法和行为的边界就可能不清晰。

应用场景:
多个类只是在算法上或行为上稍有不同的场景。
例:

5.迭代器模式

提供一种方法来访问容器对象的内部元素,而不需要访问对象的内部细节。

优点:
1)简化了访问容器元素的操作,具备一个统一的遍历接口。
2)封装了遍历算法,使算法独立于聚集角色。
缺点:给使用者一个序列化的错觉,从而产生错误。

五、行为型模式

1.中介者模式

用一个中介对象封装一些列对象的交互,中介者使个对象(同事)不需要显式的相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
例:用婚介所的demo就能很好的理解该模式:

优点:减少类间依赖和耦合
缺点:降低了同事对象的复杂性,增加了中介者类的复杂性;中介者中协调各同事关系的代码不能复用。

2.观察者模式

定义对象间一种一对多的依赖关系,使得每一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。
理解:本质上就是对动作进行封装,每次执行该动作的时候都去该动作对应注册监听事件的列表中将所有的监听者的某个动作都执行一遍,从而达到监听者观察该动作的目的。

优点:支持广播通信,观察者和被观察者都属于不同的抽象化层次,切都容易扩展。
缺点:机制一旦形成,调试和开发都会比较复杂。
注意事项:
1)一般在一个观察者模式中,最多出现一个对象既是观察者也是被观察者,这样消息最多转发一次,较容易控制。
2)异步处理时要考虑线程安全的问题。
应用场景:关联行为、事件多级触发、跨系统的消息转换场景(消息队列)

3.备忘录模式

备忘录模式又称快照模式,在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样,以后就可以将该对象恢复到原先保存的状态。
理解:发起人拥有创建自己备忘录的接口,备忘录实际上就是一个类,这个类拥有成员变量来存储状态,创建备忘录的时候实际就是将自己的状态传给了备忘录。当需要恢复状态的时候,需要一个负责人的角色对备忘录进行管理,备忘录是作为成员变量处于负责人类中的。

使用场景:需要保存和恢复、提供回滚操作、监控副本,数据库连接的事物管理用的就是备忘录模式。

4.访问者模式

封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新操作。
理解:组成一个整体类的各个成员类,对于这些成员类都实例化了对应的访问者,成员类提供了接口让访问者能够访问。那么在这个整体类中就可以实例化具体的访问者类,来对其子类的信息进行获取。

优点:使得增加新的操作变的很容易,增加新的操作只需增加新的访问者类。
缺点:
1)增加新的元素变得很困难,因为每增加一个元素都意味着要在抽象访问者中增加=一个新的抽象操作,并在每个具体的访问者中增加相应的具体操作。
2)破坏了封装、违背了依赖倒置原则。
应用场景:
业务规则要求遍历不同的对象,这也是访问者模式的出发点,迭代器模式只能访问同类或同接口的数据,访问者模式是对迭代器模式的扩充,可以遍历不同的对象,执行不同的操作。

5.状态模式

允许一个对象在其内容状态改变时改变其行为。
理解:一个类的成员可以有很多种状态,每种状态都对应了一个具体的实例,通过类内部给该成员设置不同的状态,就可以调用到不同状态实现的方法。

优点:结构清晰,封装性好
缺点:子类太多,不易管理
应用场景:对象的行为依赖于它所处的状态,即行为随状态改变而改变的场景。

6.解释器模式

一种按照规定语法对表达式进行解析的方法。
理解:一个类中定义了某种语法,需要定义一些外部的类或者接口来对该种语法进行解析。

优点:扩展性好,若有修改某种语法的解释规则,只需修改对应的解释类即可。
缺点:语法复杂时容易引入过多的类
应用场景:一个简单语法需要解释场景;

六、混合设计模式

1、命令链模式

以unix 系统下的命令行命令为例
责任链模式:负责对命令的参数进行解析,且所有扩展都是增加链数量和节点,不涉及原有代码变更。
命令模式:负责命令的分发,将适当的命令分发到指定的链上。
那么责任链模式和命令模式是如何在命令链中建立起来关系的呢?

2、工厂策略模式

以一家公司的一卡通计划为例,推行的一卡通包含两种金额:固定金额、自由金额。
策略模式:对两个扣款策略进行封装,保证两个策略就可以自由的切换,也便于对扣款策略进行扩展。此场景下提供了一个抽象的策略接口,由子类去实现。
工厂方法模式:由工厂方法直接产生一个具体的策略对象,使其他模块无需依赖具体的策略。此场景下是根据类别来实例化出具体的策略类。
门面模式:负责对复杂的扣款顺序进行封装,避免高层模块深入子系统内部细节,同时提高系统的高内聚低耦合的特性。

3、观察中介者模式

适用于一个产品具有多个触发事件,当它产生时触发一个创建事件,修改的时候触发修改事件,删除时触发删除事件。针对这种事件的触发以及处理,可以采用观察者模式和中介者模式的混合使用。
观察者模式:
中介者模式:

中介者模式和桥梁模式的区别?
中介者模式(行为型模式):将一对多交互模式通过中介形成一对一的交互,避免同事类对象之间过度耦合。
桥梁模式(结构型模式):将抽象和实现分离,实现不受抽象的约束。因为实际实例化的抽象是‘修正抽象’,解决继承的缺点,即子类过于受父类约束。

4、规格模式

规格模式是策略模式和组合模式的扩展,是一种特殊的应用,实现了对象的筛选功能。

理解:将所有的筛选方法封装成类,当需要对很多待处理对象进行各种对比操作的时候,最外层的操作只提供一个方法,该方法的参数传入封装好的具体的筛选类,这些筛选类有同样的基类以及同样的操作接口,最外层的方法只需使用传入的抽象类的接口,就能调用到不同筛选类的具体方法。
感悟:这种模式将类拆的很有层次感,耦合度极低。
疑问:此处的策略模式和组合模式又具体指的什么?
策略模式:针对一组算法,将每一个算法封装到具有共同接口的类中,从而使得他们可以相互替换。
组合模式:描述部分与整体的关系

七、设计模式对比:

1、创建型模式对比

1)工厂模式:注重对整体对象的创建方法;
2)建造者模式:注重的是部件的构造工程;
3)抽象工厂模式:注重对产品家族的创建;



2、结构型模式对比

都是通过组合类或对象生成更复杂的结构来适应更高层次的逻辑需求。
1)代理模式:注重类本身功能的变化,即对被代理对象本身的方法通过代理对象进行直接调用。

2)装饰模式:注重代理的过程,即对被装饰对象的本身的方法进行二次加工。

3)适配器模式:本质是包装的过程,将两种接口进行匹配,使原本因接口不匹配的两个类能在一起进行工作。

3、行为型模式对比

1) 策略模式:将不同的算法封装到有共同接口的不同类中,关注的是算法替换问题。

2) 命令模式:把请求内容封装成一个个命令,由接收者执行,关注的是接受者角色和命令角色的解耦。

《java设计模式》读书笔记相关推荐

  1. 读书笔记 | 墨菲定律

    1. 有些事,你现在不做,永远也不会去做. 2. 能轻易实现的梦想都不叫梦想. 3.所有的事都会比你预计的时间长.(做事要有耐心,要经得起前期的枯燥.) 4. 当我们的才华还撑不起梦想时,更要耐下心来 ...

  2. 读书笔记 | 墨菲定律(一)

    1. 有些事,你现在不做,永远也不会去做. 2. 能轻易实现的梦想都不叫梦想. 3.所有的事都会比你预计的时间长.(做事要有耐心,要经得起前期的枯燥.) 4. 当我们的才华还撑不起梦想时,更要耐下心来 ...

  3. 洛克菲勒的38封信pdf下载_《洛克菲勒写给孩子的38封信》读书笔记

    <洛克菲勒写给孩子的38封信>读书笔记 洛克菲勒写给孩子的38封信 第1封信:起点不决定终点 人人生而平等,但这种平等是权利与法律意义上的平等,与经济和文化优势无关 第2封信:运气靠策划 ...

  4. 股神大家了解多少?深度剖析股神巴菲特

    股神巴菲特是金融界里的传奇,大家是否都对股神巴菲特感兴趣呢?大家对股神了解多少?小编最近在QR社区发现了<阿尔法狗与巴菲特>,里面记载了许多股神巴菲特的人生经历,今天小编简单说一说关于股神 ...

  5. 2014巴菲特股东大会及巴菲特创业分享

     沃伦·巴菲特,这位传奇人物.在美国,巴菲特被称为"先知".在中国,他更多的被喻为"股神",巴菲特在11岁时第一次购买股票以来,白手起家缔造了一个千亿规模的 ...

  6. 《成为沃伦·巴菲特》笔记与感想

    本文首发于微信公众帐号: 一界码农(The_hard_the_luckier) 无需授权即可转载: 甚至无需保留以上版权声明-- 沃伦·巴菲特传记的纪录片 http://www.bilibili.co ...

  7. 读书笔记002:托尼.巴赞之快速阅读

    读书笔记002:托尼.巴赞之快速阅读 托尼.巴赞是放射性思维与思维导图的提倡者.读完他的<快速阅读>之后,我们就可以可以快速提高阅读速度,保持并改善理解嗯嗯管理,通过增进了解眼睛和大脑功能 ...

  8. 读书笔记001:托尼.巴赞之开动大脑

    读书笔记001:托尼.巴赞之开动大脑 托尼.巴赞是放射性思维与思维导图的提倡者.读完他的<开动大脑>之后,我们就可以对我们的大脑有更多的了解:大脑可以进行比我们预期多得多的工作:我们可以最 ...

  9. 读书笔记003:托尼.巴赞之思维导图

    读书笔记003:托尼.巴赞之思维导图 托尼.巴赞的<思维导图>一书,详细的介绍了思维发展的新概念--放射性思维:如何利用思维导图实施你的放射性思维,实现你的创造性思维,从而给出一种深刻的智 ...

  10. 产品读书《滚雪球:巴菲特和他的财富人生》

    作者简介 艾丽斯.施罗德,曾经担任世界知名投行摩根士丹利的董事总经理,因为撰写研究报告与巴菲特相识.业务上的往来使得施罗德有更多的机会与巴菲特亲密接触,她不仅是巴菲特别的忘年交,她也是第一个向巴菲特建 ...

最新文章

  1. JSP学习02-config内置对象
  2. JS: 关于元素大小和距离的有关的属性总结
  3. SQL Server温故系列(1):SQL 数据操作 CRUD 之增删改合
  4. oracle如何启动和停止服务,CentOS启动和停止服务详解
  5. 【数据结构与算法】之深入解析“外观数列”的求解思路与算法示例
  6. spring boot 整合 谷歌guava的EventBus 实现单机版的消息发布订阅
  7. 发红包案例(RedPacketFrame简介)
  8. 搭一个简单的接口测试框架
  9. matlab重要性采样,Importance Sampling (重要性采样)介绍 | 文艺数学君
  10. client mysql 逗号_Mysql-Client编码问题
  11. python的8种标准数据类型有哪些_Python的八种数据类型
  12. Android Multimedia框架总结(十四)Camera框架初识及自定义相机案例
  13. 【图像配准】基于matlab GUI光流场模型医学图像配准【含Matlab源码 747期】
  14. Python-nmap 使用文档
  15. 监控网页变化,实时推送微信消息
  16. 探索性测试的分类与测试用例
  17. A 股历年三大财务报表 API 接口
  18. 使用Go清理数据:第1部分
  19. 浏览器显示域名解析错误怎么办
  20. 《生命》第三集:Mammals (哺乳动物)

热门文章

  1. 运维之DNS服务器Bind9配置解析和基础示例及附带命令
  2. 3D目标检测——代码理解——Second代码:数据处理kitti_dataset.py的理解
  3. R 软件的下载与安装
  4. 若依路由刷新缓存页面 + router.push
  5. Win10清理鼠标右键新建菜单
  6. 卷积神经网络CNN的实战知识
  7. 电脑浏览器提示“ Adobe Flash Player 插件已被屏蔽”修复方法
  8. emd 消除端点效应 matlab代码,对五种改善EMD端点效应的方法进行分析
  9. spark常见面试题
  10. 东澳岛叹海胆之旅 面朝大海一起大快朵颐