设计模式

This commit is contained in:
罗祥 2019-12-06 17:53:21 +08:00
parent efc1088cc8
commit a5a3821857
22 changed files with 325 additions and 1 deletions

View File

@ -0,0 +1,12 @@
package com.heibaiying.behavioral.chain_of_responsibility;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class Application {
private String title;
/*请假天数*/
private int dayNum;
}

View File

@ -0,0 +1,12 @@
package com.heibaiying.behavioral.chain_of_responsibility;
public class DepartManager extends Leader {
@Override
public void approval(Application application) {
System.out.println(application.getTitle() + "被部门经理审批通过");
if (application.getDayNum() >= 5) {
leader.approval(application);
}
}
}

View File

@ -0,0 +1,12 @@
package com.heibaiying.behavioral.chain_of_responsibility;
public class GroupLeader extends Leader {
@Override
public void approval(Application application) {
System.out.println(application.getTitle() + "被组长审批通过");
if (application.getDayNum() >= 3) {
leader.approval(application);
}
}
}

View File

@ -0,0 +1,14 @@
package com.heibaiying.behavioral.chain_of_responsibility;
public abstract class Leader {
protected Leader leader;
public Leader setNextLeader(Leader leader) {
this.leader = leader;
return leader;
}
public abstract void approval(Application application);
}

View File

@ -0,0 +1,9 @@
package com.heibaiying.behavioral.chain_of_responsibility;
public class President extends Leader {
@Override
public void approval(Application application) {
System.out.println(application.getTitle() + "被总经理审批通过");
}
}

View File

@ -0,0 +1,12 @@
package com.heibaiying.behavioral.chain_of_responsibility;
public class ZTest {
public static void main(String[] args) {
GroupLeader groupLeader = new GroupLeader();
DepartManager departManager = new DepartManager();
President president = new President();
groupLeader.setNextLeader(departManager).setNextLeader(president);
groupLeader.approval(new Application("事假单", 3));
groupLeader.approval(new Application("婚假单", 10));
}
}

View File

@ -0,0 +1,5 @@
package com.heibaiying.behavioral.command;
public interface Command {
void execute();
}

View File

@ -0,0 +1,20 @@
package com.heibaiying.behavioral.command;
import java.util.ArrayList;
import java.util.List;
public class Manager {
private List<Command> commandList = new ArrayList<>();
public void addCommand(Command command) {
commandList.add(command);
}
public void executeCommands() {
for (Command command : commandList) {
command.execute();
}
commandList.clear();
}
}

View File

@ -0,0 +1,16 @@
package com.heibaiying.behavioral.command;
public class MuteCommand implements Command {
private Player player;
public MuteCommand(Player player) {
this.player = player;
}
@Override
public void execute() {
player.mute();
}
}

View File

@ -0,0 +1,16 @@
package com.heibaiying.behavioral.command;
public class PauseCommand implements Command {
private Player player;
public PauseCommand(Player player) {
this.player = player;
}
@Override
public void execute() {
player.pause();
}
}

View File

@ -0,0 +1,16 @@
package com.heibaiying.behavioral.command;
public class PlayCommand implements Command {
private Player player;
public PlayCommand(Player player) {
this.player = player;
}
@Override
public void execute() {
player.play();
}
}

View File

@ -0,0 +1,23 @@
package com.heibaiying.behavioral.command;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class Player {
private String name;
public void play() {
System.out.println(name + "播放");
}
public void pause() {
System.out.println(name + "暂停");
}
public void mute() {
System.out.println(name + "静音");
}
}

View File

@ -0,0 +1,14 @@
package com.heibaiying.behavioral.command;
public class ZTest {
public static void main(String[] args) {
Manager manager = new Manager();
Player player01 = new Player("播放器一");
Player player02 = new Player("播放器二");
manager.addCommand(new PlayCommand(player01));
manager.addCommand(new PauseCommand(player01));
manager.addCommand(new PlayCommand(player02));
manager.addCommand(new MuteCommand(player02));
manager.executeCommands();
}
}

View File

@ -23,7 +23,7 @@ public class ZTest {
//获得值映射
public static HashMap<String, Integer> getValue(String exprStr) throws IOException {
HashMap<String, Integer> map = new HashMap<String, Integer>();
HashMap<String, Integer> map = new HashMap<>();
//解析有几个参数要传递
for (char ch : exprStr.toCharArray()) {
if (ch != '+' && ch != '-') {

View File

@ -0,0 +1,29 @@
package com.heibaiying.behavioral.mediator;
import java.util.ArrayList;
import java.util.List;
public class HouseMediator extends Mediator {
private List<Person> personList = new ArrayList<>();
@Override
public void register(Person person) {
if (!personList.contains(person)) {
personList.add(person);
person.setMediator(this);
}
}
@Override
public void send(String from, String message) {
System.out.println(from + "发送消息:" + message);
for (Person person : personList) {
String name = person.getName();
if (!name.equals(from)) {
person.receive(message);
}
}
}
}

View File

@ -0,0 +1,8 @@
package com.heibaiying.behavioral.mediator;
abstract class Mediator {
public abstract void register(Person person);
public abstract void send(String from, String message);
}

View File

@ -0,0 +1,22 @@
package com.heibaiying.behavioral.mediator;
import lombok.Data;
@Data
public class Person {
private String name;
private Mediator mediator;
public Person(String name) {
this.name = name;
}
public void send(String message) {
mediator.send(this.name, message);
}
public void receive(String message) {
System.out.println(name + "收到消息:" + message);
}
}

View File

@ -0,0 +1,14 @@
package com.heibaiying.behavioral.mediator;
public class ZTest {
public static void main(String[] args) {
HouseMediator houseMediator = new HouseMediator();
Person seller = new Person("卖方");
Person buyer = new Person("买方");
houseMediator.register(seller);
houseMediator.register(buyer);
buyer.send("价格多少");
seller.send("10万");
buyer.send("太贵了");
}
}

View File

@ -0,0 +1,11 @@
package com.heibaiying.behavioral.memento;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class Article {
private String title;
private String content;
}

View File

@ -0,0 +1,23 @@
package com.heibaiying.behavioral.memento;
import java.util.ArrayList;
import java.util.List;
public class GitRepository {
private List<Memorandum> repository = new ArrayList<>();
public void save(Article article) {
Memorandum memorandum = new Memorandum(article);
repository.add(memorandum);
}
public Article get(int version) {
Memorandum memorandum = repository.get(version);
return memorandum.toArticle();
}
public Article back() {
return repository.get(repository.size() - 1).toArticle();
}
}

View File

@ -0,0 +1,21 @@
package com.heibaiying.behavioral.memento;
import java.util.Date;
public class Memorandum {
private String title;
private String content;
private Date createTime;
public Memorandum(Article article) {
this.title = article.getTitle();
this.content = article.getContent();
this.createTime = new Date();
}
public Article toArticle() {
return new Article(this.title, this.content);
}
}

View File

@ -0,0 +1,15 @@
package com.heibaiying.behavioral.memento;
public class ZTest {
public static void main(String[] args) {
GitRepository repository = new GitRepository();
Article article = new Article("Java手册", "版本一");
repository.save(article);
article.setContent("版本二");
repository.save(article);
article.setContent("版本三");
repository.save(article);
System.out.println(repository.back());
System.out.println(repository.get(0));
}
}