设计模式

博客介绍了设计模式的类型,包括创建型、结构型和行为型。创建型用于对象创建的抽象和管理;结构型通过组合封装类或对象获得更大结构;行为型关注类或对象的协作。还列举了各类型下的具体设计模式及部分模式的本质特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计模式类型

  • 创建型: 对象创建的抽像,管理对象的创建
  • 结构型: 组合封装类或对象得到更的大结构
  • 行为型:类或对象的协作

创建型

abstract factory抽像工厂。

抽像工厂:实现对象的可配置的、动态的创建,面向接口的,把所有的工厂类抽像出来一个公共的抽像类,注意抽的是工厂

在这里插入图片描述

builber

在这里插入图片描述

factory method

在Factory Method模式中,父类决定实例的生成方式,但并不决定所要生成的具体的类,具体的处理全部交给子类负责,这样就可以将生成实例的框架和实际负责生成实例的类解耦
public abstract class Factory {
    public final Product create(String owner) {
        Product p = createProduct(owner);
        registerProduct(p);
        return p;
    }

    protected abstract Product createProduct(String owner);
    protected abstract void registerProduct(Product product);
}
public class IDCardFactory extends Factory {
    private List owners = new ArrayList();
    @Override
    protected Product createProduct(String owner) {
        return new IDCard(owner);
    }

    @Override
    protected void registerProduct(Product product) {
        owners.add(((IDCard)product).getOwner());
    }
}

prototype

原型 clone对象

singleton

单利 应用中只出现一个对象

结构型

adapter

Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。

bridge桥梁

本质上聚合抽像与实现

继承关系是强关联,而聚合关系是弱关联。将两个角色之间的继承关系改为聚合关系,就是将它们之间的强关联改换成为弱关联,因此,桥梁模式中的所谓脱耦,就是指在一个软件系统中的抽象化和实现化之间使用聚合关系,而不是继承关系,从而使两者可以相对对立的变化。

在这里插入图片描述

compostie合成模式

合成模式,合成模式把部分和整体的关系用树结构表示出来。合成模式使得客户端
把一个个单独的成分对象和由它们复合而成的合成对象同等看待

在这里插入图片描述

decorator装饰者

本质上将实现或继承目标后再通过聚合方式达到装饰

装饰模式是用来替代继承的一种设计模式。它通过一种无须定义子类的方式来给对象动态增加职责,使用对象之间的关联(聚合)关系取代类之间的继承关系。降低了系统的耦合,可以动态的增加或者删除对象的职责

在这里插入图片描述

facade

一组接口统一成一个接口

flyweight共享

主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用FlyWeightFactory负责创建和管理享元单元,当一个客户端请求时,工厂需要检查当前对象池中是否有符合条件的对象,如果有,就返回已经存在的对象,如果没有,则创建一个新对象,FlyWeight是超类

proxy

所谓代理模式是指客户端并不直接调用实际的对象,而是通过调用代理,来间接的调用实际的对象。代理可以对对象的拦截操作,像拦截器啊AOP啊,JAVA有两种方式,静态与动态

行为型

chain

 使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条线,并沿着这条链传递该请求,直至有对象处理它为止。

command

命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。
命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。

在这里插入图片描述

interpreter

Iterator模式可以顺序的访问一个聚集中的元素而不必暴露聚集的内部情况。
public interface Teacher {
    public Iterator createIterator(); //点名
}
public class ConcreteTeacher implements Teacher{
    private Object[] present = {"张三来了","李四来了","王五没来"}; //同学出勤集合
    public Iterator createIterator(){
        return new ConcreteIterator(this); //新的点名    }
    public Object getElement(int index){ //得到当前同学的出勤情况
        if(index<present.length){
            return present[index];
        }
        else{
            return null;
        }
    }
    public int getSize(){
        return present.length; //得到同学出勤集合的大小,也就是说要知道班上有多少人    }
}


public interface Iterator {
    void first(); //第一个
    void next(); //下一个
    boolean isDone(); //是否点名完毕
    Object currentItem(); //当前同学的出勤情况
}


public class ConcreteIterator implements Iterator{
    private ConcreteTeacher teacher;
    private int index = 0;
    private int size = 0;
    public ConcreteIterator(ConcreteTeacher teacher){
        this.teacher = teacher;
        size = teacher.getSize(); //得到同学的数目
        index = 0;
    }
    public void first(){ //第一个
        index = 0;
    }
    public void next(){ //下一个
        if(index<size){
            index++;
        }
    }
    public boolean isDone(){ //是否点名完毕
        return (index>=size);
    }
    public Object currentItem(){ //当前同学的出勤情况
        return teacher.getElement(index);
    }
}


public class Test {
    private Iterator it;
    private Teacher teacher = new ConcreteTeacher();
    public void operation(){
        it = teacher.createIterator(); //老师开始点名
        while(!it.isDone()){ //如果没点完
            System.out.println(it.currentItem().toString()); //获得被点到同学的情况
            it.next(); //点下一个        }
    }
    public static void main(String agrs[]){
        Test test = new Test();
        test.operation();
    }
}

abserver(订阅与发布)

观察者模式(Observer Pattern) —— 定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。

观察者模式可以理解为发布-订阅模式,即多个订阅者(观察者)向发布者(被观察者)订阅状态信息,当发布者更新状态时会将状态信息向它的订阅者发布信息。发布者需要自己维护订阅者列表,可以注册或者注销对状态信息感兴趣或不感兴趣的订阅者。

state

允许对象在内部状态变化时,变更其行为,并且修改其类
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梁晓山(ben)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值