parent
ee0e9609f7
commit
019731de62
@ -0,0 +1,21 @@
|
|||||||
|
package com.baiye.design.behavioral.interpreter;
|
||||||
|
|
||||||
|
public class AddInterpreter implements Interpreter {
|
||||||
|
|
||||||
|
private Interpreter firstExpression, secondExpression;
|
||||||
|
|
||||||
|
public AddInterpreter(Interpreter firstExpression, Interpreter secondExpression) {
|
||||||
|
this.firstExpression = firstExpression;
|
||||||
|
this.secondExpression = secondExpression;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int interpret() {
|
||||||
|
return this.firstExpression.interpret() + this.secondExpression.interpret();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "+";
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
package com.baiye.design.behavioral.interpreter;
|
||||||
|
|
||||||
|
public interface Interpreter {
|
||||||
|
int interpret();
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
package com.baiye.design.behavioral.interpreter;
|
||||||
|
|
||||||
|
public class MultiInterpreter implements Interpreter{
|
||||||
|
|
||||||
|
private Interpreter firstExpression, secondExpression;
|
||||||
|
|
||||||
|
public MultiInterpreter(Interpreter firstExpression, Interpreter secondExpression) {
|
||||||
|
this.firstExpression = firstExpression;
|
||||||
|
this.secondExpression = secondExpression;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int interpret() {
|
||||||
|
return this.firstExpression.interpret() * this.secondExpression.interpret();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "*";
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,33 @@
|
|||||||
|
package com.baiye.design.behavioral.interpreter;
|
||||||
|
|
||||||
|
import java.util.Stack;
|
||||||
|
|
||||||
|
public class MyExpressionParse {
|
||||||
|
|
||||||
|
private Stack<Interpreter> stack = new Stack<Interpreter>();
|
||||||
|
|
||||||
|
public int parse(String str){
|
||||||
|
String[] strItemArr = str.split(" ");
|
||||||
|
for (String symbol : strItemArr) {
|
||||||
|
if (!OpratorUtil.isOperator(symbol)) {
|
||||||
|
NumberInterpreter numberInterpreter = new NumberInterpreter(symbol);
|
||||||
|
stack.push(numberInterpreter);
|
||||||
|
System.out.printf("入栈: %d%n", numberInterpreter.interpret());
|
||||||
|
}else {
|
||||||
|
// 是运算符则可以进行计算
|
||||||
|
Interpreter firstInterpreter = stack.pop();
|
||||||
|
Interpreter secondInterpreter = stack.pop();
|
||||||
|
System.out.printf("出栈: %d 和 %d%n", firstInterpreter.interpret(), secondInterpreter.interpret());
|
||||||
|
Interpreter expressionObject = OpratorUtil.getExpressionObject(firstInterpreter, secondInterpreter, symbol);
|
||||||
|
System.out.printf("应用运算符: %s%n", expressionObject);
|
||||||
|
assert expressionObject != null;
|
||||||
|
int result = expressionObject.interpret();
|
||||||
|
NumberInterpreter resultExpression = new NumberInterpreter(result);
|
||||||
|
stack.push(resultExpression);
|
||||||
|
System.out.printf("阶段结果入栈: %d%n", resultExpression.interpret());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int result = stack.pop().interpret();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
package com.baiye.design.behavioral.interpreter;
|
||||||
|
|
||||||
|
public class NumberInterpreter implements Interpreter{
|
||||||
|
|
||||||
|
private Integer number;
|
||||||
|
|
||||||
|
public NumberInterpreter(Integer number) {
|
||||||
|
this.number = number;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对String类型的进行转化
|
||||||
|
*/
|
||||||
|
public NumberInterpreter(String number) {
|
||||||
|
this.number = Integer.parseInt(number);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int interpret() {
|
||||||
|
return this.number;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
package com.baiye.design.behavioral.interpreter;
|
||||||
|
|
||||||
|
public class OpratorUtil {
|
||||||
|
|
||||||
|
public static boolean isOperator(String symbol){
|
||||||
|
return (symbol.equals("+") || symbol.equals("*"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Interpreter getExpressionObject(Interpreter firstInterpreter, Interpreter secondInterpreter, String symbol) {
|
||||||
|
|
||||||
|
if (symbol.equals("+")) {
|
||||||
|
return new AddInterpreter(firstInterpreter, secondInterpreter);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (symbol.equals("*")) {
|
||||||
|
return new MultiInterpreter(firstInterpreter, secondInterpreter);
|
||||||
|
}
|
||||||
|
|
||||||
|
// todo 这里可以做成一个空解释器
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
package com.baiye.design.behavioral.interpreter;
|
||||||
|
|
||||||
|
public class Test {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
String inputStr = "6 100 11 + *"; // (11 + 100 ) * 6
|
||||||
|
MyExpressionParse myExpressionParse = new MyExpressionParse();
|
||||||
|
int parse = myExpressionParse.parse(inputStr);
|
||||||
|
System.out.println("解释器结果是: " + parse);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package com.baiye.design.behavioral.iterator;
|
||||||
|
|
||||||
|
public class Course {
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
public Course(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
package com.baiye.design.behavioral.iterator;
|
||||||
|
|
||||||
|
public interface CourseAggregate {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 定义对Course的操作
|
||||||
|
*/
|
||||||
|
|
||||||
|
void addCourse(Course course);
|
||||||
|
|
||||||
|
void removeCourse(Course course);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取课程的迭代器
|
||||||
|
*/
|
||||||
|
CourseIterator getCourseIterator();
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
package com.baiye.design.behavioral.iterator;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class CourseAggregateImpl implements CourseAggregate{
|
||||||
|
|
||||||
|
private List courseList;
|
||||||
|
|
||||||
|
public CourseAggregateImpl() {
|
||||||
|
this.courseList = new ArrayList();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addCourse(Course course) {
|
||||||
|
courseList.add(course);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeCourse(Course course) {
|
||||||
|
courseList.remove(course);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CourseIterator getCourseIterator() {
|
||||||
|
return new CourseIteratorImpl(courseList);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
package com.baiye.design.behavioral.iterator;
|
||||||
|
|
||||||
|
public interface CourseIterator {
|
||||||
|
|
||||||
|
Course nextCourse();
|
||||||
|
|
||||||
|
boolean isLastCourse();
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
package com.baiye.design.behavioral.iterator;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class CourseIteratorImpl implements CourseIterator {
|
||||||
|
|
||||||
|
private List courseList;
|
||||||
|
|
||||||
|
private int position;
|
||||||
|
|
||||||
|
private Course course;
|
||||||
|
|
||||||
|
public CourseIteratorImpl(List courseList) {
|
||||||
|
this.courseList = courseList;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Course nextCourse() {
|
||||||
|
System.out.println("返回课程,位置是: " + position);
|
||||||
|
course = (Course) courseList.get(position);
|
||||||
|
position ++;
|
||||||
|
return course;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isLastCourse() {
|
||||||
|
if (position < courseList.size()){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
package com.baiye.design.behavioral.iterator;
|
||||||
|
|
||||||
|
public class Test {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Course course1 = new Course("Java电商一期");
|
||||||
|
Course course2 = new Course("Java电商二期");
|
||||||
|
Course course4 = new Course("Java设计精讲");
|
||||||
|
Course course3 = new Course("Python课程");
|
||||||
|
Course course5 = new Course("算法课程");
|
||||||
|
Course course6 = new Course("前端课程");
|
||||||
|
|
||||||
|
CourseAggregate courseAggregate = new CourseAggregateImpl();
|
||||||
|
|
||||||
|
courseAggregate.addCourse(course1);
|
||||||
|
courseAggregate.addCourse(course2);
|
||||||
|
courseAggregate.addCourse(course3);
|
||||||
|
courseAggregate.addCourse(course4);
|
||||||
|
courseAggregate.addCourse(course5);
|
||||||
|
courseAggregate.addCourse(course6);
|
||||||
|
|
||||||
|
System.out.println("-----------课程列表-----------");
|
||||||
|
printCourses(courseAggregate);
|
||||||
|
|
||||||
|
courseAggregate.removeCourse(course3);
|
||||||
|
courseAggregate.removeCourse(course5);
|
||||||
|
|
||||||
|
System.out.println("-----------删除操作之后的课程列表-----------");
|
||||||
|
printCourses(courseAggregate);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void printCourses(CourseAggregate courseAggregate) {
|
||||||
|
// fixme 构建是不是可以使用 builder 模式进行
|
||||||
|
CourseIterator courseIterator = courseAggregate.getCourseIterator();
|
||||||
|
while (!courseIterator.isLastCourse()) {
|
||||||
|
Course course = courseIterator.nextCourse();
|
||||||
|
System.out.println(course.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
package com.baiye.design.behavioral.mediator;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 中介者
|
||||||
|
*/
|
||||||
|
public class StudyGroup {
|
||||||
|
public static void showMessage(User user, String message) {
|
||||||
|
System.out.println(new Date().toString() + "[" + user.getName() + "]: " + message);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
package com.baiye.design.behavioral.mediator;
|
||||||
|
|
||||||
|
public class Test {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
User name1 = new User("heihei");
|
||||||
|
User name2 = new User("xxx");
|
||||||
|
|
||||||
|
name1.sendMessage("gogogo");
|
||||||
|
name2.sendMessage("ok");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
package com.baiye.design.behavioral.mediator;
|
||||||
|
|
||||||
|
public class User {
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
public User(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendMessage(String message) {
|
||||||
|
StudyGroup.showMessage(this, message);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
package com.baiye.design.behavioral.memento;
|
||||||
|
|
||||||
|
public class Article {
|
||||||
|
private String title;
|
||||||
|
private String content;
|
||||||
|
private String imgs;
|
||||||
|
|
||||||
|
public Article(String title, String content, String imgs) {
|
||||||
|
this.title = title;
|
||||||
|
this.content = content;
|
||||||
|
this.imgs = imgs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTitle(String title) {
|
||||||
|
this.title = title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getContent() {
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setContent(String content) {
|
||||||
|
this.content = content;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getImgs() {
|
||||||
|
return imgs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setImgs(String imgs) {
|
||||||
|
this.imgs = imgs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArticleMemento saveToMemento() {
|
||||||
|
ArticleMemento articleMemento = new ArticleMemento(this.title,this.content,this.imgs);
|
||||||
|
return articleMemento;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void undoFromMemento(ArticleMemento articleMemento) {
|
||||||
|
this.title = articleMemento.getTitle();
|
||||||
|
this.content = articleMemento.getContent();
|
||||||
|
this.imgs = articleMemento.getImgs();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Article{" +
|
||||||
|
"title='" + title + '\'' +
|
||||||
|
", content='" + content + '\'' +
|
||||||
|
", imgs='" + imgs + '\'' +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
package com.baiye.design.behavioral.memento;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 快照类
|
||||||
|
*/
|
||||||
|
public class ArticleMemento {
|
||||||
|
private String title;
|
||||||
|
private String content;
|
||||||
|
private String imgs;
|
||||||
|
|
||||||
|
public ArticleMemento(String title, String content, String imgs) {
|
||||||
|
this.title = title;
|
||||||
|
this.content = content;
|
||||||
|
this.imgs = imgs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getContent() {
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getImgs() {
|
||||||
|
return imgs;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "ArticleMemento{" +
|
||||||
|
"title='" + title + '\'' +
|
||||||
|
", content='" + content + '\'' +
|
||||||
|
", imgs='" + imgs + '\'' +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
package com.baiye.design.behavioral.memento;
|
||||||
|
|
||||||
|
import java.util.Stack;
|
||||||
|
|
||||||
|
public class ArticleMementoManager {
|
||||||
|
|
||||||
|
private final Stack<ArticleMemento> ARTICLE_MEMENTO_STACK = new Stack<>();
|
||||||
|
|
||||||
|
public ArticleMemento getMemento() {
|
||||||
|
ArticleMemento articleMemento = ARTICLE_MEMENTO_STACK.pop();
|
||||||
|
return articleMemento;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addMemento(ArticleMemento articleMemento) {
|
||||||
|
ARTICLE_MEMENTO_STACK.push(articleMemento);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,48 @@
|
|||||||
|
package com.baiye.design.behavioral.memento;
|
||||||
|
|
||||||
|
public class Test {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
ArticleMementoManager articleMementoManager = new ArticleMementoManager();
|
||||||
|
|
||||||
|
Article article = new Article("设计模式A", "手记内容A", "手记图片A");
|
||||||
|
|
||||||
|
// 通过 article 组装 articleMemento
|
||||||
|
ArticleMemento articleMemento = article.saveToMemento();
|
||||||
|
|
||||||
|
// 快照存档
|
||||||
|
articleMementoManager.addMemento(articleMemento);
|
||||||
|
|
||||||
|
System.out.println("手记信息:" + article);
|
||||||
|
|
||||||
|
System.out.println("修改手记信息start");
|
||||||
|
article.setTitle("设计模式B");
|
||||||
|
article.setContent("手记内容B");
|
||||||
|
article.setImgs("手记图片B");
|
||||||
|
System.out.println("修改手记信息end");
|
||||||
|
|
||||||
|
System.out.println("手记信息:" + article);
|
||||||
|
|
||||||
|
articleMemento = article.saveToMemento();
|
||||||
|
articleMementoManager.addMemento(articleMemento);
|
||||||
|
|
||||||
|
|
||||||
|
article.setTitle("设计模式C");
|
||||||
|
article.setContent("手记内容C");
|
||||||
|
article.setImgs("手记图片C");
|
||||||
|
System.out.println("手记信息:" + article);
|
||||||
|
|
||||||
|
|
||||||
|
System.out.println("暂存回退start");
|
||||||
|
|
||||||
|
System.out.println("回退1次");
|
||||||
|
articleMemento = articleMementoManager.getMemento();
|
||||||
|
article.undoFromMemento(articleMemento);
|
||||||
|
System.out.println("手记信息:" + article);
|
||||||
|
|
||||||
|
System.out.println("回退2次");
|
||||||
|
articleMemento = articleMementoManager.getMemento();
|
||||||
|
article.undoFromMemento(articleMemento);
|
||||||
|
System.out.println("手记信息:" + article);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
package com.baiye.design.behavioral.observer;
|
||||||
|
|
||||||
|
import java.util.Observable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 成为被观察对象 - 线程安全的
|
||||||
|
*/
|
||||||
|
public class Course extends Observable {
|
||||||
|
private String courseName;
|
||||||
|
|
||||||
|
public Course(String courseName) {
|
||||||
|
this.courseName = courseName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCourseName() {
|
||||||
|
return courseName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void produceQuestion(Course course, Question question) {
|
||||||
|
System.out.println(question.getUserName() + "在" + course.getCourseName() + "提交了一个问题");
|
||||||
|
// 代表状态发生了改变
|
||||||
|
setChanged();
|
||||||
|
notifyObservers(question);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
package com.baiye.design.behavioral.observer;
|
||||||
|
|
||||||
|
public class Question {
|
||||||
|
private String userName;
|
||||||
|
private String questionContent;
|
||||||
|
|
||||||
|
public String getUserName() {
|
||||||
|
return userName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserName(String userName) {
|
||||||
|
this.userName = userName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getQuestionContent() {
|
||||||
|
return questionContent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setQuestionContent(String questionContent) {
|
||||||
|
this.questionContent = questionContent;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
package com.baiye.design.behavioral.observer;
|
||||||
|
|
||||||
|
import java.util.Observable;
|
||||||
|
import java.util.Observer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 观察者
|
||||||
|
*/
|
||||||
|
public class Teacher implements Observer {
|
||||||
|
|
||||||
|
private String teacherName;
|
||||||
|
|
||||||
|
public Teacher(String teacherName) {
|
||||||
|
this.teacherName = teacherName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update(Observable o, Object arg) {
|
||||||
|
Course course = (Course) o;
|
||||||
|
Question question = (Question) arg;
|
||||||
|
System.out.println(teacherName + "老师的" + course.getCourseName() + "课程接收的一个" + question.getUserName() + "提交的" + question.getQuestionContent() + "问题");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
package com.baiye.design.behavioral.observer;
|
||||||
|
|
||||||
|
public class Test {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Course course = new Course("Java设计模式精讲");
|
||||||
|
Teacher alpha = new Teacher("Alpha");
|
||||||
|
Teacher alpha1 = new Teacher("Alpha1");
|
||||||
|
// 添加观察者
|
||||||
|
course.addObserver(alpha);
|
||||||
|
course.addObserver(alpha1);
|
||||||
|
// 业务逻辑
|
||||||
|
Question question = new Question();
|
||||||
|
question.setUserName("Baiye");
|
||||||
|
question.setQuestionContent("Java的主函数如何编写");
|
||||||
|
|
||||||
|
course.produceQuestion(course, question);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
package com.baiye.design.behavioral.strategy;
|
||||||
|
|
||||||
|
public class EmptyPromotionStrategy implements PromotionStrategy{
|
||||||
|
@Override
|
||||||
|
public void doPromotion() {
|
||||||
|
System.out.println("无促销活动");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
package com.baiye.design.behavioral.strategy;
|
||||||
|
|
||||||
|
public class FanxianPromotionStrategy implements PromotionStrategy {
|
||||||
|
@Override
|
||||||
|
public void doPromotion() {
|
||||||
|
System.out.println("返现促销,返回的金额存放在用户余额中");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
package com.baiye.design.behavioral.strategy;
|
||||||
|
|
||||||
|
public class LIjianPromotionStrategy implements PromotionStrategy{
|
||||||
|
@Override
|
||||||
|
public void doPromotion() {
|
||||||
|
System.out.println("立减促销,课程价格直接减去配置的价格");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
package com.baiye.design.behavioral.strategy;
|
||||||
|
|
||||||
|
public class ManjianPromotionStrategy implements PromotionStrategy{
|
||||||
|
@Override
|
||||||
|
public void doPromotion() {
|
||||||
|
System.out.println("满减促销,满200减20元");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package com.baiye.design.behavioral.strategy;
|
||||||
|
|
||||||
|
public class PromotionActivity {
|
||||||
|
private PromotionStrategy promotionStrategy;
|
||||||
|
|
||||||
|
public PromotionActivity(PromotionStrategy promotionStrategy) {
|
||||||
|
this.promotionStrategy = promotionStrategy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void executePromotionStrategy() {
|
||||||
|
promotionStrategy.doPromotion();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
package com.baiye.design.behavioral.strategy;
|
||||||
|
|
||||||
|
public interface PromotionStrategy {
|
||||||
|
void doPromotion();
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,35 @@
|
|||||||
|
package com.baiye.design.behavioral.strategy;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class PromotionStrategyFactory {
|
||||||
|
|
||||||
|
public static Map<String, PromotionStrategy> PROMOTION_STRATEGY_MAP = new HashMap<>();
|
||||||
|
|
||||||
|
static {
|
||||||
|
PROMOTION_STRATEGY_MAP.put(PromotionKey.LIJIAN, new LIjianPromotionStrategy());
|
||||||
|
PROMOTION_STRATEGY_MAP.put(PromotionKey.FANXIAN, new ManjianPromotionStrategy());
|
||||||
|
PROMOTION_STRATEGY_MAP.put(PromotionKey.MANJIAN, new FanxianPromotionStrategy());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final PromotionStrategy NON_PROMOTION = new EmptyPromotionStrategy();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 私有化构造器
|
||||||
|
*/
|
||||||
|
private PromotionStrategyFactory() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static PromotionStrategy getPromotionStrategy(String promotionKey) {
|
||||||
|
PromotionStrategy promotionStrategy = PROMOTION_STRATEGY_MAP.get(promotionKey);
|
||||||
|
return promotionStrategy == null ? NON_PROMOTION : promotionStrategy;
|
||||||
|
}
|
||||||
|
|
||||||
|
private interface PromotionKey{
|
||||||
|
String LIJIAN = "LIJIAN";
|
||||||
|
String FANXIAN = "FANXIAN";
|
||||||
|
String MANJIAN = "MANJIAN";
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
package com.baiye.design.behavioral.strategy;
|
||||||
|
|
||||||
|
public class Test {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
// PromotionActivity promotionActivity618 = new PromotionActivity(new ManjianPromotionStrategy());
|
||||||
|
// PromotionActivity promotionActivity1111 = new PromotionActivity(new FanxianPromotionStrategy());
|
||||||
|
//
|
||||||
|
// promotionActivity618.executePromotionStrategy();
|
||||||
|
// promotionActivity1111.executePromotionStrategy();
|
||||||
|
|
||||||
|
// ==================
|
||||||
|
|
||||||
|
// 外部传来 promotionKay
|
||||||
|
String promotionKey = "LIJIAN";
|
||||||
|
// 使用 策略模式 + 工厂模式 来实现
|
||||||
|
PromotionActivity promotionActivity = new PromotionActivity(PromotionStrategyFactory.getPromotionStrategy(promotionKey));
|
||||||
|
promotionActivity.executePromotionStrategy();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
package com.baiye.design.behavioral.templatemethod;
|
||||||
|
|
||||||
|
public abstract class ACourse {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 不让子类修改的模板方法
|
||||||
|
*/
|
||||||
|
protected final void makeCourse() {
|
||||||
|
// 必须做的函数
|
||||||
|
this.makePPT();
|
||||||
|
this.makeVidoe();
|
||||||
|
// 可选的就交给钩子方法
|
||||||
|
if (needWriteArticle()){
|
||||||
|
this.wirteArticle();
|
||||||
|
}
|
||||||
|
this.packageCourse();
|
||||||
|
}
|
||||||
|
|
||||||
|
final void makePPT(){
|
||||||
|
System.out.println("制作PPT");
|
||||||
|
}
|
||||||
|
|
||||||
|
final void makeVidoe(){
|
||||||
|
System.out.println("制作视频");
|
||||||
|
}
|
||||||
|
|
||||||
|
final void wirteArticle(){
|
||||||
|
System.out.println("制作手记");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 钩子方法 - 对行为是否进行做一下控制
|
||||||
|
*/
|
||||||
|
protected boolean needWriteArticle(){
|
||||||
|
// 默认 false
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 完全交给子类来实现
|
||||||
|
*/
|
||||||
|
abstract void packageCourse();
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
package com.baiye.design.behavioral.templatemethod;
|
||||||
|
|
||||||
|
public class DesignPatternCourse extends ACourse{
|
||||||
|
@Override
|
||||||
|
void packageCourse() {
|
||||||
|
System.out.println("提供Java课程源代码");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 重写钩子方法进行判断
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected boolean needWriteArticle() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,31 @@
|
|||||||
|
package com.baiye.design.behavioral.templatemethod;
|
||||||
|
|
||||||
|
public class FECourse extends ACourse{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对外开发钩子方法的判断标识
|
||||||
|
*/
|
||||||
|
private boolean needWriteArticleFlag = false;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void packageCourse() {
|
||||||
|
System.out.println("提供课程的前端代码");
|
||||||
|
System.out.println("提供课程图片等多媒体素材");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 使用构造器方式对外进行开放
|
||||||
|
* fixme 可以选用不同的赋值方式
|
||||||
|
*/
|
||||||
|
public FECourse(boolean needWriteArticleFlag) {
|
||||||
|
this.needWriteArticleFlag = needWriteArticleFlag;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean needWriteArticle() {
|
||||||
|
return this.needWriteArticleFlag;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
package com.baiye.design.behavioral.templatemethod;
|
||||||
|
|
||||||
|
public class Test {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
System.out.println("后端设计模式课程start---");
|
||||||
|
ACourse designPatternCourse = new DesignPatternCourse();
|
||||||
|
designPatternCourse.makeCourse();
|
||||||
|
System.out.println("后端设计模式课程end---");
|
||||||
|
|
||||||
|
System.out.println("前端设计模式课程start---");
|
||||||
|
ACourse feCourse = new FECourse(false);
|
||||||
|
feCourse.makeCourse();
|
||||||
|
System.out.println("前端设计模式课程end---");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
package com.baiye.design.pattern.creational.abstractfactory;
|
||||||
|
|
||||||
|
public abstract class Article {
|
||||||
|
public abstract void produce();
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
package com.baiye.design.pattern.creational.abstractfactory;
|
||||||
|
|
||||||
|
|
||||||
|
public interface CourseFactory {
|
||||||
|
|
||||||
|
Video getVideo();
|
||||||
|
|
||||||
|
Article getArticle();
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
package com.baiye.design.pattern.creational.abstractfactory;
|
||||||
|
|
||||||
|
public class JavaArticle extends Article{
|
||||||
|
@Override
|
||||||
|
public void produce() {
|
||||||
|
System.out.println("书写Java手记");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
package com.baiye.design.pattern.creational.abstractfactory;
|
||||||
|
|
||||||
|
public class JavaCourseFactory implements CourseFactory {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Video getVideo() {
|
||||||
|
return new JavaVideo();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Article getArticle() {
|
||||||
|
return new JavaArticle();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
package com.baiye.design.pattern.creational.abstractfactory;
|
||||||
|
|
||||||
|
public class JavaVideo extends Video{
|
||||||
|
@Override
|
||||||
|
public void produce() {
|
||||||
|
System.out.println("录制Java课程视频");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
package com.baiye.design.pattern.creational.abstractfactory;
|
||||||
|
|
||||||
|
public class PythonArticle extends Article{
|
||||||
|
@Override
|
||||||
|
public void produce() {
|
||||||
|
System.out.println("书写Python手记");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package com.baiye.design.pattern.creational.abstractfactory;
|
||||||
|
|
||||||
|
public class PythonCourseFactory implements CourseFactory{
|
||||||
|
@Override
|
||||||
|
public Video getVideo() {
|
||||||
|
return new PythonVideo();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Article getArticle() {
|
||||||
|
return new PythonArticle();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
package com.baiye.design.pattern.creational.abstractfactory;
|
||||||
|
|
||||||
|
public class PythonVideo extends Video{
|
||||||
|
@Override
|
||||||
|
public void produce() {
|
||||||
|
System.out.println("录制Python课程");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package com.baiye.design.pattern.creational.abstractfactory;
|
||||||
|
|
||||||
|
public class Test {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
CourseFactory courseFactory = new JavaCourseFactory();
|
||||||
|
courseFactory.getArticle().produce();
|
||||||
|
courseFactory.getVideo().produce();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
package com.baiye.design.pattern.creational.abstractfactory;
|
||||||
|
|
||||||
|
public abstract class Video {
|
||||||
|
public abstract void produce();
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
package com.baiye.design.pattern.creational.builder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 帮助进行调用构建着构建的类
|
||||||
|
*/
|
||||||
|
public class Coach {
|
||||||
|
private CourseBuilder courseBuilder;
|
||||||
|
|
||||||
|
public void setCourseBuilder(CourseBuilder courseBuilder) {
|
||||||
|
this.courseBuilder = courseBuilder;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Course makeCourse(String courseName, String coursePPT,
|
||||||
|
String courseVideo, String courseArticle,
|
||||||
|
String courseQA) {
|
||||||
|
this.courseBuilder.buildCourseName(courseName);
|
||||||
|
this.courseBuilder.buildCoursePPT(coursePPT);
|
||||||
|
this.courseBuilder.buildCourseVideo(courseVideo);
|
||||||
|
this.courseBuilder.buildCourseArticle(courseArticle);
|
||||||
|
this.courseBuilder.buildCourseQA(courseQA);
|
||||||
|
return this.courseBuilder.makeCourse();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,63 @@
|
|||||||
|
package com.baiye.design.pattern.creational.builder;
|
||||||
|
|
||||||
|
public class Course {
|
||||||
|
private String courseName;
|
||||||
|
private String coursePPT;
|
||||||
|
private String courseVideo;
|
||||||
|
private String courseArticle;
|
||||||
|
/**
|
||||||
|
* question & answer
|
||||||
|
*/
|
||||||
|
private String courseQA;
|
||||||
|
|
||||||
|
public String getCourseName() {
|
||||||
|
return courseName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCourseName(String courseName) {
|
||||||
|
this.courseName = courseName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCoursePPT() {
|
||||||
|
return coursePPT;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCoursePPT(String coursePPT) {
|
||||||
|
this.coursePPT = coursePPT;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCourseVideo() {
|
||||||
|
return courseVideo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCourseVideo(String courseVideo) {
|
||||||
|
this.courseVideo = courseVideo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCourseArticle() {
|
||||||
|
return courseArticle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCourseArticle(String courseArticle) {
|
||||||
|
this.courseArticle = courseArticle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCourseQA() {
|
||||||
|
return courseQA;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCourseQA(String courseQA) {
|
||||||
|
this.courseQA = courseQA;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Course{" +
|
||||||
|
"courseName='" + courseName + '\'' +
|
||||||
|
", coursePPT='" + coursePPT + '\'' +
|
||||||
|
", courseVideo='" + courseVideo + '\'' +
|
||||||
|
", courseArticle='" + courseArticle + '\'' +
|
||||||
|
", courseQA='" + courseQA + '\'' +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
package com.baiye.design.pattern.creational.builder;
|
||||||
|
|
||||||
|
public class CourseActualBuilder extends CourseBuilder{
|
||||||
|
|
||||||
|
// 组合到实际的课程当中
|
||||||
|
private Course course = new Course();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void buildCourseName(String courseName) {
|
||||||
|
course.setCourseName(courseName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void buildCoursePPT(String coursePPT) {
|
||||||
|
course.setCoursePPT(coursePPT);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void buildCourseVideo(String courseVideo) {
|
||||||
|
course.setCourseVideo(courseVideo);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void buildCourseArticle(String courseArticle) {
|
||||||
|
course.setCourseArticle(courseArticle);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void buildCourseQA(String courseQA) {
|
||||||
|
course.setCourseQA(courseQA);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Course makeCourse() {
|
||||||
|
return course;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
package com.baiye.design.pattern.creational.builder;
|
||||||
|
|
||||||
|
public abstract class CourseBuilder {
|
||||||
|
public abstract void buildCourseName(String courseName);
|
||||||
|
public abstract void buildCoursePPT(String coursePPT);
|
||||||
|
public abstract void buildCourseVideo(String courseVideo);
|
||||||
|
public abstract void buildCourseArticle(String courseArticle);
|
||||||
|
public abstract void buildCourseQA(String courseQA);
|
||||||
|
|
||||||
|
public abstract Course makeCourse();
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.baiye.design.pattern.creational.builder;
|
||||||
|
|
||||||
|
public class Test {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
CourseBuilder courseBuilder = new CourseActualBuilder();
|
||||||
|
Coach coach = new Coach();
|
||||||
|
coach.setCourseBuilder(courseBuilder);
|
||||||
|
|
||||||
|
Course course = coach.makeCourse(
|
||||||
|
"Java设计模式",
|
||||||
|
"Java设计模式PPT",
|
||||||
|
"Java设计模式视频",
|
||||||
|
"Java设计模式手记",
|
||||||
|
"Java设计模式问答");
|
||||||
|
|
||||||
|
System.out.println(course);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,74 @@
|
|||||||
|
package com.baiye.design.pattern.creational.builder.v2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 这种模式常用 - Lombook的 @Builder 功能好像是类似的
|
||||||
|
*/
|
||||||
|
public class Course {
|
||||||
|
private String courseName;
|
||||||
|
private String coursePPT;
|
||||||
|
private String courseVideo;
|
||||||
|
private String courseArticle;
|
||||||
|
/**
|
||||||
|
* question & answer
|
||||||
|
*/
|
||||||
|
private String courseQA;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Course{" +
|
||||||
|
"courseName='" + courseName + '\'' +
|
||||||
|
", coursePPT='" + coursePPT + '\'' +
|
||||||
|
", courseVideo='" + courseVideo + '\'' +
|
||||||
|
", courseArticle='" + courseArticle + '\'' +
|
||||||
|
", courseQA='" + courseQA + '\'' +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
|
||||||
|
public Course(CourseBuilder courseBuilder) {
|
||||||
|
this.courseName = courseBuilder.courseName;
|
||||||
|
this.coursePPT = courseBuilder.coursePPT;
|
||||||
|
this.courseVideo = courseBuilder.courseVideo;
|
||||||
|
this.courseArticle = courseBuilder.courseArticle;
|
||||||
|
this.courseQA = courseBuilder.courseQA;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class CourseBuilder{
|
||||||
|
private String courseName;
|
||||||
|
private String coursePPT;
|
||||||
|
private String courseVideo;
|
||||||
|
private String courseArticle;
|
||||||
|
/**
|
||||||
|
* question & answer
|
||||||
|
*/
|
||||||
|
private String courseQA;
|
||||||
|
|
||||||
|
public CourseBuilder buildCourseName(String courseName) {
|
||||||
|
this.courseName = courseName;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CourseBuilder buildCoursePPT(String coursePPT) {
|
||||||
|
this.coursePPT = coursePPT;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CourseBuilder buildCourseVideo(String courseVideo) {
|
||||||
|
this.courseVideo = courseVideo;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CourseBuilder buildCourseArticle(String courseArticle) {
|
||||||
|
this.courseArticle = courseArticle;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CourseBuilder buildCourseQA(String courseQA) {
|
||||||
|
this.courseQA = courseQA;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Course build() {
|
||||||
|
return new Course(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
package com.baiye.design.pattern.creational.builder.v2;
|
||||||
|
|
||||||
|
public class Test {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Course build = new Course.CourseBuilder()
|
||||||
|
.buildCourseName("Java设计模式")
|
||||||
|
.buildCoursePPT("Java设计模式PPT")
|
||||||
|
.buildCourseVideo("Java设计模式视频")
|
||||||
|
.buildCourseArticle("Java设计模式手记")
|
||||||
|
.buildCourseQA("Java设计模式问答")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
System.out.println(build);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
package com.baiye.design.pattern.creational.factorymethod;
|
||||||
|
|
||||||
|
public class FEVideo extends Video{
|
||||||
|
@Override
|
||||||
|
public void produce() {
|
||||||
|
System.out.println("录制FE视频");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
package com.baiye.design.pattern.creational.factorymethod;
|
||||||
|
|
||||||
|
public class FEVideoFactory extends VideoFactory{
|
||||||
|
@Override
|
||||||
|
public Video getVideo() {
|
||||||
|
return new FEVideo();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
package com.baiye.design.pattern.creational.factorymethod;
|
||||||
|
|
||||||
|
public class JavaVideo extends Video {
|
||||||
|
@Override
|
||||||
|
public void produce() {
|
||||||
|
System.out.println("录制Java视频");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
package com.baiye.design.pattern.creational.factorymethod;
|
||||||
|
|
||||||
|
public class JavaVideoFactory extends VideoFactory{
|
||||||
|
@Override
|
||||||
|
public Video getVideo() {
|
||||||
|
return new JavaVideo();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
package com.baiye.design.pattern.creational.factorymethod;
|
||||||
|
|
||||||
|
public class PythonVideo extends Video {
|
||||||
|
@Override
|
||||||
|
public void produce() {
|
||||||
|
System.out.println("录制Python视频");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
package com.baiye.design.pattern.creational.factorymethod;
|
||||||
|
|
||||||
|
public class PythonVideoFactory extends VideoFactory{
|
||||||
|
@Override
|
||||||
|
public Video getVideo() {
|
||||||
|
return new PythonVideo();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
package com.baiye.design.pattern.creational.factorymethod;
|
||||||
|
|
||||||
|
public class Test {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
VideoFactory videoFactory = new JavaVideoFactory();
|
||||||
|
Video video = videoFactory.getVideo();
|
||||||
|
video.produce();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
package com.baiye.design.pattern.creational.factorymethod;
|
||||||
|
|
||||||
|
public abstract class Video {
|
||||||
|
public abstract void produce();
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
package com.baiye.design.pattern.creational.factorymethod;
|
||||||
|
|
||||||
|
public abstract class VideoFactory {
|
||||||
|
|
||||||
|
public abstract Video getVideo();
|
||||||
|
/* public Video getVideo(String type) {
|
||||||
|
if ("java".equalsIgnoreCase(type)) {
|
||||||
|
return new JavaVideo();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("python".equalsIgnoreCase(type)) {
|
||||||
|
return new PythonVideo();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
|
||||||
|
}*/
|
||||||
|
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// * 使用反射来进行演进
|
||||||
|
// */
|
||||||
|
// public Video getVideo(Class clazz) {
|
||||||
|
// Video video = null;
|
||||||
|
// try {
|
||||||
|
// video = (Video) Class.forName(clazz.getName()).newInstance();
|
||||||
|
// } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
|
||||||
|
// e.printStackTrace();
|
||||||
|
// }
|
||||||
|
// return video;
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
package com.baiye.design.pattern.creational.simplefactory;
|
||||||
|
|
||||||
|
public class JavaVideo extends Video{
|
||||||
|
@Override
|
||||||
|
public void produce() {
|
||||||
|
System.out.println("录制Java视频");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
package com.baiye.design.pattern.creational.simplefactory;
|
||||||
|
|
||||||
|
public class PythonVideo extends Video{
|
||||||
|
@Override
|
||||||
|
public void produce() {
|
||||||
|
System.out.println("录制Python视频");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
package com.baiye.design.pattern.creational.simplefactory;
|
||||||
|
|
||||||
|
public class Test {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
// VideoFactory videoFactory = new VideoFactory();
|
||||||
|
// Video video = videoFactory.getVideo("java");
|
||||||
|
// assert video != null;
|
||||||
|
// video.produce();
|
||||||
|
|
||||||
|
VideoFactory videoFactory = new VideoFactory();
|
||||||
|
Video video = videoFactory.getVideo(JavaVideo.class);
|
||||||
|
assert video != null;
|
||||||
|
video.produce();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
package com.baiye.design.pattern.creational.simplefactory;
|
||||||
|
|
||||||
|
public abstract class Video {
|
||||||
|
public abstract void produce();
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
package com.baiye.design.pattern.creational.simplefactory;
|
||||||
|
|
||||||
|
public class VideoFactory {
|
||||||
|
/* public Video getVideo(String type) {
|
||||||
|
if ("java".equalsIgnoreCase(type)) {
|
||||||
|
return new JavaVideo();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("python".equalsIgnoreCase(type)) {
|
||||||
|
return new PythonVideo();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
|
||||||
|
}*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 使用反射来进行演进
|
||||||
|
*/
|
||||||
|
public Video getVideo(Class clazz) {
|
||||||
|
Video video = null;
|
||||||
|
try {
|
||||||
|
video = (Video) Class.forName(clazz.getName()).newInstance();
|
||||||
|
} catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return video;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
package com.baiye.design.structural.bridge;
|
||||||
|
|
||||||
|
public class ABCBank extends Bank{
|
||||||
|
|
||||||
|
public ABCBank(Account account) {
|
||||||
|
super(account);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
Account openAccount() {
|
||||||
|
System.out.println("打开中国农业银行账号");
|
||||||
|
account.openAccount();
|
||||||
|
return account;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
package com.baiye.design.structural.bridge;
|
||||||
|
|
||||||
|
public interface Account {
|
||||||
|
|
||||||
|
Account openAccount();
|
||||||
|
|
||||||
|
void showAccountType();
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
package com.baiye.design.structural.bridge;
|
||||||
|
|
||||||
|
public abstract class Bank {
|
||||||
|
|
||||||
|
protected Account account;
|
||||||
|
|
||||||
|
public Bank(Account account){
|
||||||
|
this.account = account;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 方法名可以和Account中的
|
||||||
|
*/
|
||||||
|
abstract Account openAccount();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
package com.baiye.design.structural.bridge;
|
||||||
|
|
||||||
|
public class DepositAccount implements Account{
|
||||||
|
@Override
|
||||||
|
public Account openAccount() {
|
||||||
|
System.out.println("打开定期账号");
|
||||||
|
return new DepositAccount();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void showAccountType() {
|
||||||
|
System.out.println("这是一个定期账号");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
package com.baiye.design.structural.bridge;
|
||||||
|
|
||||||
|
public class ICBCBank extends Bank{
|
||||||
|
|
||||||
|
public ICBCBank(Account account) {
|
||||||
|
super(account);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
Account openAccount() {
|
||||||
|
System.out.println("打开中国工商银行账号");
|
||||||
|
account.openAccount();
|
||||||
|
return account;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
package com.baiye.design.structural.bridge;
|
||||||
|
|
||||||
|
public class SavingAccount implements Account{
|
||||||
|
@Override
|
||||||
|
public Account openAccount() {
|
||||||
|
System.out.println("打开活期账号");
|
||||||
|
return new SavingAccount();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void showAccountType() {
|
||||||
|
System.out.println("这是一个活期账号");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
package com.baiye.design.structural.bridge;
|
||||||
|
|
||||||
|
public class Test {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Bank icbcBank = new ICBCBank(new DepositAccount());
|
||||||
|
Account icbcAccount = icbcBank.openAccount();
|
||||||
|
icbcAccount.showAccountType();
|
||||||
|
|
||||||
|
Bank abcBank = new ICBCBank(new SavingAccount());
|
||||||
|
Account abcAccount = abcBank.openAccount();
|
||||||
|
abcAccount.showAccountType();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
package test;
|
||||||
|
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
public class Test {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
System.out.println(Arrays.toString("".getBytes(StandardCharsets.UTF_8)));
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue