责任链模式
package com.ego.chain;
public abstract class Boss {
public int level;
public Boss nextBoss;
public void process(int level){
if(level <= this.level){
approve();
}
if(nextBoss != null){
nextBoss.process(level);
}
}
public abstract void approve();
}
package com.ego.chain;
public class BigBoss extends Boss{
public BigBoss(){
this.level = 3;
}
@Override
public void approve() {
System.out.println("大Boss审批通过!");
}
}
package com.ego.chain;
public class MidBoss extends Boss{
public MidBoss(){
this.level = 2;
}
@Override
public void approve() {
System.out.println("中Boss审批通过!");
}
}
package com.ego.chain;
public class LittleBoss extends Boss{
public LittleBoss(){
this.level = 1;
}
@Override
public void approve() {
System.out.println("小Boss审批通过!");
}
}
package com.ego.chain;
public class Test {
public static void main(String[] args) {
LittleBoss littleBoss = new LittleBoss();
MidBoss midBoss = new MidBoss();
BigBoss bigBoss = new BigBoss();
littleBoss.nextBoss = midBoss;
midBoss.nextBoss = bigBoss;
System.out.println("=========1级的审批过程========");
littleBoss.process(1);
System.out.println("=========2级的审批过程========");
littleBoss.process(2);
System.out.println("=========3级的审批过程========");
littleBoss.process(3);
}
}
组合模式
package com.ego.composite;
import com.sun.org.apache.xpath.internal.operations.Mod;
import java.util.ArrayList;
import java.util.List;
public class Module {
public String name;
public List<Module> children = new ArrayList<>();
public Module(String name){
this.name = name;
}
public void process() {
System.out.println(this.name + "执行");
for(Module child : children){
child.process();
}
}
public void add(Module module) {
children.add(module);
}
public void remove(Module module) {
children.remove(module);
}
public List<Module> getChildren() {
return children;
}
}
package com.ego.composite;
public class Test {
public static void main(String[] args) {
Module submit = new Module("提交模块");
Module shopping = new Module("购物车模块");
Module address = new Module("地址模块");
Module money = new Module("支付模块");
Module goods = new Module("商品模块");
submit.add(shopping);
submit.add(goods);
shopping.add(address);
shopping.add(money);
submit.process();
}
}
Builder模式
package com.ego.builder;
import java.util.Objects;
public class Student {
private String name;
private int age;
private int number;
private String sex;
public Student(StudentBuilder builder) {
this.name = builder.name;
this.age = builder.age;
this.number = builder.number;
this.sex = builder.sex;
}
public static class StudentBuilder{
private String name;
private int age;
private int number;
private String sex;
public StudentBuilder setName(String name){
this.name = name;
return this;
}
public StudentBuilder setAge(int age){
this.age = age;
return this;
}
public StudentBuilder setNumber(int number){
this.number = number;
return this;
}
public StudentBuilder setSex(String sex){
this.sex = sex;
return this;
}
public Student build(){
return new Student(this);
}
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", number=" + number +
", sex='" + sex + '\'' +
'}';
}
}
package com.ego.builder;
public class Test {
public static void main(String[] args) {
Student student1 = new Student.StudentBuilder().setName("ego").build();
Student student2 = new Student.StudentBuilder().setName("ego").setNumber(123456).build();
Student student3 = new Student.StudentBuilder().setName("ego").setNumber(123456).setSex("男").build();
Student student4 = new Student.StudentBuilder().setName("ego").setNumber(123456).setSex("男").setAge(20).build();
System.out.println(student1);
System.out.println(student2);
System.out.println(student3);
System.out.println(student4);
}
}
工厂模式
package com.ego.factory;
public abstract class BaseDao {
public abstract void insert();
public abstract void delete();
}
package com.ego.factory;
public class CartDao extends BaseDao {
@Override
public void insert() {
System.out.println("cartDao的增方法");
}
@Override
public void delete() {
System.out.println("cartDao的删方法");
}
}
package com.ego.factory;
public class ShoppingDao extends BaseDao {
@Override
public void insert() {
System.out.println("shoppingDao的增方法");
}
@Override
public void delete() {
System.out.println("shoppingDao的删方法");
}
}
package com.ego.factory;
public class UserDao extends BaseDao {
@Override
public void insert() {
System.out.println("userDao的增方法");
}
@Override
public void delete() {
System.out.println("userDao的删方法");
}
}
package com.ego.factory;
import java.util.HashMap;
import java.util.Map;
public class DaoFactory {
public static Map<String, BaseDao> map = new HashMap<>();
static {
map.put("userDao", new UserDao());
map.put("shoppingDao", new ShoppingDao());
map.put("cartDao", new CartDao());
}
public static BaseDao getDao(String name){
return map.get(name);
}
}
package com.ego.factory;
public class Test {
public static void main(String[] args) {
BaseDao userDao = DaoFactory.getDao("userDao");
BaseDao shoppingDao = DaoFactory.getDao("shoppingDao");
BaseDao cartDao = DaoFactory.getDao("cartDao");
userDao.insert();
userDao.delete();
shoppingDao.insert();
shoppingDao.delete();
cartDao.insert();
cartDao.delete();
}
}
组合模式
package com.ego.facade;
public class Juice {
public void cook(){
System.out.println("做果汁");
}
public void secret(){
System.out.println("这是果汁秘方,不能泄漏!");
}
}
package com.ego.facade;
public class Meet {
public void cook(){
System.out.println("做肉");
}
public void secret(){
System.out.println("这是肉秘方,不能泄漏!");
}
}
package com.ego.facade;
public class Vegetable {
public void cook(){
System.out.println("做蔬菜");
}
public void secret(){
System.out.println("这是蔬菜秘方,不能泄漏!");
}
}
package com.ego.facade;
public class Waiter {
Vegetable vegetable = new Vegetable();
Meet meet = new Meet();
Juice juice = new Juice();
public void cookVegetable(){
vegetable.cook();
}
public void cookMeet(){
meet.cook();
}
public void cookJuice(){
juice.cook();
}
}
package com.ego.facade;
public class Test {
public static void main(String[] args) {
System.out.println("======传统方式=======");
Vegetable vegetable = new Vegetable();
Meet meet = new Meet();
Juice juice = new Juice();
vegetable.cook();
meet.cook();
juice.cook();
vegetable.secret();
meet.secret();
juice.secret();
System.out.println("======门面模式======");
Waiter waiter = new Waiter();
waiter.cookVegetable();
waiter.cookMeet();
waiter.cookJuice();
}
}
装饰模式
package com.ego.decorator;
public abstract class Food {
public String food;
public abstract String cook();
}
package com.ego.decorator;
public class Chicken extends Food{
public Chicken(){
this.food = "鸡肉";
}
@Override
public String cook() {
return this.food;
}
}
package com.ego.decorator;
public class Meet extends Food{
public Meet(){
this.food = "牛肉";
}
@Override
public String cook() {
return this.food;
}
}
package com.ego.decorator;
public abstract class DecorationFood extends Food {
public abstract String cook();
public abstract String type();
}
package com.ego.decorator;
public class SteamFood extends DecorationFood {
Food food;
public SteamFood(Food food){
this.food = food;
}
@Override
public String cook() {
return type() + this.food.cook();
}
@Override
public String type() {
return "蒸";
}
}
package com.ego.decorator;
public class ToastFood extends DecorationFood {
Food food;
public ToastFood(Food food){
this.food = food;
}
@Override
public String cook() {
return type() + this.food.cook();
}
@Override
public String type() {
return "烤";
}
}
package com.ego.decorator;
public class Test {
public static void main(String[] args) {
System.out.println("======普通做法======");
Food chicken = new Chicken();
Food meet = new Meet();
System.out.println(chicken.cook());
System.out.println(meet.cook());
System.out.println("======高级做法======");
DecorationFood toast = new ToastFood(chicken);
DecorationFood steam = new SteamFood(toast);
System.out.println(toast.cook());
System.out.println(steam.cook());
}
}