常用设计模式(通俗易懂的例子,小学生都能看懂!)

责任链模式

package com.ego.chain;

public abstract class Boss {
    public int level; //等级
    public Boss nextBoss; //上级Boss

    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) {

        //三个级别的boss
        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;
    }

    //builder类
    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());
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值