Skip to content

Commit

Permalink
🏗️ 装饰器在netty里面的应用逻辑编写
Browse files Browse the repository at this point in the history
  • Loading branch information
sanshengshui committed Apr 16, 2020
1 parent fb005ac commit 5f234c2
Show file tree
Hide file tree
Showing 5 changed files with 122 additions and 0 deletions.
21 changes: 21 additions & 0 deletions netty-design-patterns-decorator/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,28 @@
</parent>
<modelVersion>4.0.0</modelVersion>

<name>netty :: design patterns :: decorator</name>
<artifactId>netty-design-patterns-decorator</artifactId>
<description>装饰器在Netty里面的应用</description>

<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
</dependency>
</dependencies>


</project>
29 changes: 29 additions & 0 deletions netty-design-patterns-decorator/src/main/java/App.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* @author james mu
* @date 2020/4/16 19:55
*/
public class App {

private static final Logger LOGGER = LoggerFactory.getLogger(App.class);

public static void main(String[] args) {

// simple troll
LOGGER.info("A simple looking troll approaches.");
Troll troll = new SimpleTroll();
troll.attack();
troll.fleeBattle();
LOGGER.info("Simple troll power {}.\n", troll.getAttackPower());

// change the behavior of the simple troll by adding a decorator
LOGGER.info("A troll with huge club surprises you.");
ClubbedTroll clubbedTroll = new ClubbedTroll(troll);
clubbedTroll.attack();
clubbedTroll.fleeBattle();
LOGGER.info("Clubbed troll power {}.\n", clubbedTroll.getAttackPower());
}

}
33 changes: 33 additions & 0 deletions netty-design-patterns-decorator/src/main/java/ClubbedTroll.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* @author james mu
* @date 2020/4/16 19:53
*/
public class ClubbedTroll implements Troll {

private static final Logger LOGGER = LoggerFactory.getLogger(ClubbedTroll.class);

private Troll decorated;

public ClubbedTroll(Troll decorated) {
this.decorated = decorated;
}

@Override
public void attack() {
decorated.attack();
LOGGER.info("The troll swings at you with a club!");
}

@Override
public int getAttackPower() {
return decorated.getAttackPower() + 10;
}

@Override
public void fleeBattle() {
decorated.fleeBattle();
}
}
26 changes: 26 additions & 0 deletions netty-design-patterns-decorator/src/main/java/SimpleTroll.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* @author james mu
* @date 2020/4/16 19:49
*/
public class SimpleTroll implements Troll {

private static final Logger LOGGER = LoggerFactory.getLogger(SimpleTroll.class);

@Override
public void attack() {
LOGGER.info("The troll tries to grab you!");
}

@Override
public int getAttackPower() {
return 10;
}

@Override
public void fleeBattle() {
LOGGER.info("The troll shrieks in horror and runs away!");
}
}
13 changes: 13 additions & 0 deletions netty-design-patterns-decorator/src/main/java/Troll.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
/**
* @author james mu
* @date 2020/4/16 19:44
*/
public interface Troll {

void attack();

int getAttackPower();

void fleeBattle();

}

0 comments on commit 5f234c2

Please sign in to comment.