![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计思想
北海冥鱼未眠
道路在身旁!
展开
-
多线程设计模式-保护性暂停模式
有这么一个场景,我们有两个线程,其中一个线程需要等待获取另外一个线程的执行结果,之气那我们是使用join方法可以实现,现在我们不用jon来实现。同时我们可以看一下join方法的底层实现原理,这里面也用到了超时等待,我们上面所写的就是join超时等待的实现原理。上面都是单任务的情况,我们还可以对上面的代码进行修改,改成多任务的版本。并创建一个公共类用来存放GuardedObject 类。同时然后编写业务类,分别添加任务和获取执行的结果。在GuradeObject类中加入以下代码。最后编写代码进行测试。原创 2022-12-25 13:41:44 · 165 阅读 · 0 评论 -
生产者和消费者模式
具有任务顺序的生产者消费者模式。原创 2022-03-21 19:51:28 · 181 阅读 · 0 评论 -
动态代理模式
动态代理与静态代理的区别是动态代理是自动生成的,底层是用的反射机制 有两大类动态代理的方式:基于接口的动态代理、基于类的动态代理 代表分别是:jdk基于接口的动态代理 cglib:基于类的动态代理。底层会创建目标类的子类,然后再在子类中调用父类中的方法。 这个时候就可以在目标类的前后执行我们想要执行的其他方法。 为什么JDK的动态代理只能基于接口实现,不能基于继承来实现?因为Java中不支持多继承,而JDK的动态代理在创建代理对象时,默认让代理对象继承了Proxy类,所以JDK只能通过接口去实原创 2022-01-24 20:08:26 · 149 阅读 · 0 评论 -
Java实现状态模式
状态模式:当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类。 对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。 灯又两种状态,开和关,我们把灯定义成一个接口, interface Lamp{ void on(); void off(); } 对应灯的两种不同的状态,创建两个实现类 开灯状态下的实现类 /** * 开灯的状态下,只能执行关灯的操作 */ class Lamp_on implements.原创 2022-03-20 02:03:21 · 343 阅读 · 0 评论 -
模板方法设计模式
在软件开发中实现一个需求时,整体步骤很固定、通用,这些步骤已经在父类中写好了。但是某些部分易变,易变部分可以抽象出来,供不同子类实现。这就是一种模板模式。 比如上班族和学生党都是人,每天都要吃早餐午餐和晚餐,但是除了这些事情之外,上班族要去上班,学上党每天要去学习,这就是不同的地方。 创建一个模板类 abstract class Person{ public void day(){ eat(); service(); sleep(); .原创 2022-03-20 01:07:06 · 66 阅读 · 0 评论 -
外观模式(门面模式)
定义:提供一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层的接口,让子系统更容易使用。 在软件开发中,有时候一个客户类需要和多个业务类交互,由于涉及到的类比较多,导致使用时代码较为复杂,此时,特别需要一个能够统筹所有业务类的角色,由它来负责和业务类进行交互,而客户类只需与该类交互。外观模式可以很好地解决让子系统外部的客户端在使用子系统的时候,既能简单地使用这些子系统内部的模块,而又不用客户端去与子系统内部的多个模块交互。 业务方法 class Business1{ public.原创 2022-03-20 00:59:40 · 45 阅读 · 0 评论 -
观察者模式
观察者模式 创建一个观察者接口 interface Observer{ void update(String message); } 观察者接口的实现类 class WeChat implements Observer{ private String name; public WeChat(String name) { this.name = name; } @Override public void update(String mess原创 2022-03-20 00:39:37 · 63 阅读 · 0 评论 -
Java单例模式
Java中创建对象的方式 直接调用构造方法 利用反射调用构造方法 反序列化 克隆 Unsafe实现对象的创建 1:构造方法私有饿汉式单例模式, /* * 饿汉式单例模式 * * 缺点:Unsafe方式现在不好预防 * */ class Single01 implements Serializable { private Single01() { if (SingleTon!=null){ //防止反射破坏单例模式 throw原创 2022-03-03 23:57:43 · 161 阅读 · 0 评论 -
工厂设计模式
简单工厂模式和抽象工厂模式 package DesignPattern; /** * 工厂模式 */ public class Test02 { /** * 简单的工厂模式 */ // public static void main(String[] args) { // // EasyClassFactory getClass = new EasyClassFactory(); // Course english = getClass.原创 2022-03-19 23:21:56 · 136 阅读 · 0 评论 -
软件设计七大原则
在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据 7 条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。我来依次来总结这 7 条原则。 这 7 种设计原则是软件设计模式必须尽量遵循的原则,各种原则要求的侧重点不同。其中,开闭原则是总纲,它告诉我们要对扩展开放,对修改关闭;里氏替换原则告诉我们不要破坏继承体系;依赖倒置原则告诉我们要面向接口编程;单一职责原则告诉我们实现类要职责单一;接口隔离原则告诉我们在设计接口的时候要精简单一;迪米特法.原创 2022-03-19 22:23:12 · 324 阅读 · 0 评论