![](https://img-blog.csdnimg.cn/2021022122562010.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java设计模式
加油
奔跑的扫地僧
在代码的世界中,知识需要分享,代码需要open source,世界才能大一统。世界本没有界限,人类的思维限定了国界。
展开
-
JAVA语言讲解设计模式---对象适配器(2)
适配器模式原创 2022-12-04 10:22:20 · 283 阅读 · 1 评论 -
使用静态内部类实现懒汉单例模式-java
静态内部类实现懒汉单例模式原创 2022-06-16 15:25:11 · 569 阅读 · 2 评论 -
java设计模式实战-(反射+策略模式)
学完23种设计模式,相信很多同学都疑问,除了单例模式、工厂模式其他模式还有运用的场景吗?现在这里就举一个例子。首先策略模式需要先有了解,我们常用策略模式解决实际开发中的if else特别多的场景。但是在实际的开发中,真正单独只用策略模式的场景还是很少的。我们需要利用Spring的注入功能,实现根据不同的入参,跳转到不同的实现类中,以此来减少if else的使用。举个场景:假如我们做物流系统,需要根据前段传过来的渠道参数,来定制化不同的规则校验逻辑。这里我们距离alibaba渠道和wechat渠道原创 2021-12-25 14:07:08 · 1355 阅读 · 0 评论 -
java设计模式---策略模式(strategy pattern)
策略模式的核心思想是:多用组合/聚合 少用继承。用行为类组合,而不是行为类继承。策略类的缺点就是:每添加一个策略就要增加一个类,当策略过多时,类的数量也是会相应增加。举一个例子,我们统称一类鸭子,鸭子我们分为三类,北京鸭、野鸭、玩具鸭,假定野鸭的飞行能力最强,北京鸭飞行能力差,玩具鸭不会飞。还是鸭子嘎嘎叫、游泳等特性行为。传统的继承的实现方式如下:抽象鸭子类public abstract class Duck { public Duck(){ } publi.原创 2021-08-31 23:11:25 · 231 阅读 · 0 评论 -
java 类关系之聚合与组合
UML的类图中一般包含五种关系即 关联 聚合 组合 泛化 依赖空心菱形代表has - a 即持有/拥有的意思 聚合 Aggregation 通过构造器给的 实心菱形代表part - of 即 ~的一部分的意思(也有人用contains of) 组合 Composition聚合与组合的形象类比,我在网上看到过这样一段话,觉得很形象:大雁喜欢热闹害怕孤独 所以它们一直过着群居的生活 这样就有了雁群 每一只大雁都有自己的雁群 每个雁群都有好多大雁 大雁与雁群的这种关系就可以称之为聚...原创 2021-08-31 08:31:33 · 398 阅读 · 0 评论 -
java设计模式---外观模式(facade pattern)
GoF提出的设计模式总共有23种,根据目的准则分类分为三大类:创建型模式,共五种:单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。外观模式优点:外观模式对外屏蔽了子系统的细节,因此外观模式降低了客户端对子系统使用的复杂性。外观模式.原创 2021-08-28 15:43:21 · 230 阅读 · 0 评论 -
java设计模式---中介者模式
首先我们了解下设计模式的总览:GoF提出的设计模式总共有23种,根据目的准则分类分为三大类:创建型模式,共五种:单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。先摆结论:中介者模式的优缺点和使用场景优点符合迪米特原则,将原原创 2021-08-25 22:14:22 · 250 阅读 · 0 评论 -
java设计模式---Bridge桥接模式
桥接模式:将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变。不会发生N*N的 类扩展具体例子:手机的型号分为折叠手机和直排手机,手机品牌也分为很多种,未来这两个都可能无限扩展。phone和brand组成了“桥”上代码://定义手机品牌类public interface Brand { void open(); void close(); void call();}//定义phone 组合brand类public abstract class原创 2021-05-18 23:08:45 · 176 阅读 · 2 评论 -
java设计模式---templateMethod模式
模板模式简单,直接上代码概念。//测试实现的主体类public class templateMethod { public static void main(String[] args) { F f = new C(); f.method(); }}//抽象父类方法abstract class F{ void method(){ operation1(); operation2(); }原创 2021-05-17 08:53:20 · 144 阅读 · 0 评论 -
单例模式之---DCL写法讲解
DCL :double check 双重检查直接上代码,注释中进行解释。public class Singleton { private Singleton(){};//构造器私有化 private static volatile Singleton singleton; //volatile修饰的变量,一旦有修改,直接加载到主存中。volatile保证共享的这个对象对其他线程同步可见 public static Singleton getInstance(){原创 2021-04-15 08:56:58 · 397 阅读 · 0 评论 -
Java设计模式---简单工厂模式
背景:我们造pizza ,造不同的pizza ,这里举例子,我们造奶酪pizza 和 希腊pizza思路:我们先创建一个抽象的pizza类,来描述造pizza的过程。类如下:public abstract class Pizza { protected String name; //不同步pizza材料不一样 因此写成抽象的方法 public abstract void prepare(); //准备烘烤 不同步pizza材料不一样 因此写成抽象的方法原创 2021-04-01 22:22:57 · 115 阅读 · 0 评论 -
Java设计模式---适配器模式(对象适配器)
适配器模式,举个例子,给手机充电。将220V转换韦5V具体代码如下://适配对象,变成接口或抽象类public interface Voltage5V { public int output5V();}//被适配的类public class Voltage220V { public int output220V(){ int src = 220; System.out.println("电压为: "+src); retu原创 2021-03-25 15:19:55 · 297 阅读 · 2 评论 -
Java设计模式---建造者模式
建造者模式是将一个产品的属性与其制造的过程分开,因为不同产品的制造过程可能不一样,需要定制化。具体代码呢,以建造房子为例子,见如下:1、明确需要的产品:// 我们只对产品进行属性定义 不做行为定义public class House { private String basic; private String wall; private String roofed; public String getBasic() { return basi原创 2021-03-18 20:59:19 · 131 阅读 · 1 评论 -
Java设计模式---组合模式
组合模式应用举例子:我们开发一个需求,要求呈现学校+学院+专业的场景,便于学校管理学院,学院管理专业。解决方案:传统的思维是,写一个学校类,再写一个学院类继承学校,再写一个专业类继承学院。缺点:这种结构不适合进行各个层级的管理。组合模式:采用聚合的方式,写一个组合的抽象类或者接口,然后学校和学院继承或者实现该类。组合模式的使用场景:1、需要遍历的组织机构或者处理的对象具有树形结构。2、如果节点和叶子存在很多差异性的话,属性和方法都不一样,就不太适合使用该模式。组合模式使用的具体例子:J原创 2021-03-08 13:56:19 · 142 阅读 · 1 评论 -
Java设计模式---观察者模式
首先我们先一定要锁定观察者模式的使用场景:一个类的变化,告知其他相关联的类。举例如下代码:天气的变化,告知其他所有的地方天气台。①传统写法:localWeather是被动知道天气的,需要WeatherData天气发生变化才知道(此类传统写法的坏处,当我们新增加一个 RemoteWeather 时,我们得修改WeatherData类,耦合性很高)public class LocalWeather { private float temperature; private f原创 2021-03-04 22:31:18 · 137 阅读 · 1 评论 -
Java设计模式---代理模式(动态代理)
我们创建一个TeacherDao类来教课,需要创建一个代理老师来教课。第一步:先创建一个接口public interface ITTeacherDao { public void teach();}第二步:创建一个教课的老师类public class TeacherDao implements ITTeacherDao { @Override public void teach() { System.out.println("老师正在讲课");原创 2021-02-22 22:24:09 · 107 阅读 · 0 评论 -
Java设计模式---代理模式(静态代理)
废话不多说,上代码:我们创建一个TeacherDao类来教课,需要创建一个代理老师来教课。第一步:先创建一个接口public interface ITTeacherDao { public void teach();}第二步:创建一个教课的老师类public class TeacherDao implements ITTeacherDao { @Override public void teach() { System.out.printl原创 2021-02-22 21:54:43 · 107 阅读 · 0 评论 -
Java设计模式---Singleton模式
单例模式:我们通常又称之为单子或单态模式。为什么会出现单例模式呢?因为需求,有时候我们需要针对某个类,我们得到它的实例是同一个,无论获取多少次。因此我们就开始想怎么实现这个功能了。①首先我们想到的肯定是不能在类的外面,采用new 关键字来创建实例了,因为每new一个就新产生了一个对象。因此我们 就想到了将构造器私有化,new的对象放在类里面去。②在类里面,再提供一个public 的静原创 2017-04-16 10:56:19 · 263 阅读 · 0 评论 -
Java设计模式---Prototype模式
具体的实现代码的demo:样例为克隆一只羊:public class Sheep implements Cloneable{ private String name; private int age; private String color; @Override protected Object clone() { Sheep sheep =null; try { sheep = (Shee...原创 2021-02-21 22:55:59 · 157 阅读 · 1 评论