mirror of
https://github.com/youthlql/JavaYouth.git
synced 2026-03-14 05:43:50 +08:00
Dubbo源码系列更新两篇文章
This commit is contained in:
@@ -8,7 +8,7 @@ categories:
|
||||
- 01.设计思想
|
||||
keywords: 设计模式,设计思想
|
||||
description: 设计模式第一部分-常用设计思想。
|
||||
cover: 'https://cdn.jsdelivr.net/gh/youthlql/lqlp@master/design_patterns/logo.jpg'
|
||||
cover: 'https://unpkg.zhimg.com/youthlql@1.0.0/design_patterns/logo.jpg'
|
||||
abbrlink: c3dcce5d
|
||||
date: 2021-06-07 17:21:58
|
||||
---
|
||||
@@ -198,7 +198,7 @@ public class Ostrich extends AbstractBird { //鸵鸟
|
||||
1. 这种设计思路虽然可以解决问题,但不够优美。因为除了鸵鸟之外,不会飞的鸟还有很多,比如企鹅。对于这些不会飞的鸟来说,我们都需要重写 fly() 方法,抛出异常。这样的设计,一方面,徒增了编码的工作量;另一方面,也违背了我们之后要讲的最小知识原则(Least Knowledge Principle,也叫最少知识原则或者迪米特法则),暴露不该暴露的接口给外部,增加了类使用过程中被误用的概率。
|
||||
2. 你可能又会说,那我们再通过 AbstractBird 类派生出两个更加细分的抽象类:会飞的鸟类 AbstractFlyableBird 和不会飞的鸟类 AbstractUnFlyableBird,让麻雀、乌鸦这些会飞的鸟都继承 AbstractFlyableBird,让鸵鸟、企鹅这些不会飞的鸟,都继承 AbstractUnFlyableBird 类,不就可以了吗?具体的继承关系如下图所示:
|
||||
|
||||
<img src="https://cdn.jsdelivr.net/gh/youthlql/lqlp@master/design_patterns/design_ideas/0001.png"/>
|
||||
<img src="https://unpkg.zhimg.com/youthlql@1.0.0/design_patterns/design_ideas/0001.png"/>
|
||||
|
||||
|
||||
|
||||
@@ -206,7 +206,7 @@ public class Ostrich extends AbstractBird { //鸵鸟
|
||||
|
||||
2. 是否会飞?是否会叫?两个行为搭配起来会产生四种情况:会飞会叫、不会飞会叫、会飞不会叫、不会飞不会叫。如果我们继续沿用刚才的设计思路,那就需要再定义四个抽象类(AbstractFlyableTweetableBird、AbstractFlyableUnTweetableBird、AbstractUnFlyableTweetableBird、AbstractUnFlyableUnTweetableBird)。
|
||||
|
||||
<img src="https://cdn.jsdelivr.net/gh/youthlql/lqlp@master/design_patterns/design_ideas/0002.png"/>
|
||||
<img src="https://unpkg.zhimg.com/youthlql@1.0.0/design_patterns/design_ideas/0002.png"/>
|
||||
|
||||
|
||||
|
||||
@@ -376,7 +376,7 @@ demofunction(client);
|
||||
|
||||
|
||||
|
||||
<img src="https://cdn.jsdelivr.net/gh/youthlql/lqlp@master/design_patterns/design_ideas/0003.png"/>
|
||||
<img src="https://unpkg.zhimg.com/youthlql@1.0.0/design_patterns/design_ideas/0003.png"/>
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user