iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >七种常用的设计模式
  • 295
分享到

七种常用的设计模式

设计模式java单例模式 2023-08-31 16:08:31 295人浏览 独家记忆
摘要

常用的七种设计模式:单例模式、工厂方法模式、抽象工厂模式、代理模式、装饰器模式、观察者模式和责任链模式。 设计模式分类 设计模式根据工作的目的,分为创建型模式、结构型模式和行为型模式三类。 创建型模式:单例模式、工厂方法模式、抽象工厂模式、

常用的七种设计模式:单例模式、工厂方法模式、抽象工厂模式、代理模式、装饰器模式、观察者模式和责任链模式。

设计模式分类

设计模式根据工作的目的,分为创建型模式、结构型模式和行为型模式三类。

创建型模式:单例模式工厂方法模式抽象工厂模式、创建者模式、原型模式。

结构型模式:适配器模式、代理模式装饰器模式、外观模式、桥接模式、组合模式、享元模式。

行为型模式:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

软件设计七大原则(OOP原则)

开闭原则:对扩展开放,对修改关闭。
里氏替换原则:不要破坏继承体系,子类重写方法功能发生改变,不应该影响父类方法的含义。
依赖倒置原则:要面向接口编程,不要面向实现编程。
单一职责原则:控制类的粒度大小、将对象解耦、提高其内聚性。
接口隔离原则:要为各个类建立它们需要的专用接口。
迪米特法则:一个类应该保持对其它对象最少的了解,降低耦合度。
合成复用原则:尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。

实际上,七大原则的目的只有一个:降低对象之间的耦合,增加程序的可复用性、可扩展性和可维护性。

1、单例模式:一个类只有一个实例,且该类能自行创建这个实例的一种模式
        ①单例类只有一个实例对象

        ②该单例对象必须由单例类自行创建

        ③单例类对外提供一个访问该单例的全局访问点

       ④、优点
                单例模式可以保证内存里只有一个实例,减少了内存的开销。
                可以避免对资源的多重占用。
                单例模式设置全局访问点,可以优化和共享资源的访问。
        ⑤、缺点
                单例模式一般没有接口,扩展困难。
                单例模式的功能代码通常写在一个类中,如果功能设计不合理,则很容易违背单一职责原则

        饿汉式单例:类一旦加载就创建一个单例,保证在调用getInstance方法之前单例已经存在,这种饿汉式单例会造成空间浪费。

public class Hungry {    private Hungry(){}    private final static Hungry HUNGRY = new Hungry();    public static Hungry getInstance(){        return HUNGRY;    }}

        懒汉式单例:为了避免内存空间浪费,采用懒汉式单例,即用到该单例对象的时候再创建。

public class LazyMan {    private LazyMan(){};    public static LazyMan lazyMan;    public static LazyMan getInstance(){        if (lazyMan==null){            lazyMan = new LazyMan();        }        return lazyMan;    }}

这是最简单的懒汉式,但是,存在很大问题,单线程下这段代码没有问题,但是在多线程下有很大问题。

public class LazyMan {    private LazyMan(){        System.out.println(Thread.currentThread().getName()+"");    }    public static LazyMan lazyMan;    public static LazyMan getInstance(){        if (lazyMan==null){            lazyMan = new LazyMan();        }        return lazyMan;    }    public static void main(String[] args) {        for(int i=0;i<10;i++){            new Thread(()->{                lazyMan.getInstance();            }).start();        }    }}

 会发现结果都不一样,因此,并发情况下,这段代码是有问题的。我们需要进行两端检测,进行“加”:synchronized (Singleton.class)。

public class LazyMan {    private LazyMan(){        System.out.println(Thread.currentThread().getName()+"");    }    public static LazyMan lazyMan;    public static LazyMan getInstance(){        if (lazyMan==null){        //第一层检查,检查是否有引用指向对象,高并发情况下会有多个线程同时进入            synchronized (LazyMan.class){    //第一层锁,保证只有一个线程进入                //双重检查,防止多个线程同时进入第一层检查(因单例模式只允许存在一个对象,故在创建对象之前无引用指向对象,所有线程均可进入第一层检查)                //当某一线程获得锁创建一个LazyMan对象时,即已有引用指向对象,lazyMan不为空,从而保证只会创建一个对象                //假设没有第二层检查,那么第一个线程创建完对象释放锁后,后面进入对象也会创建对象,会产生多个对象                if(lazyMan==null){    //第二层检查                    //synchronized关键字作用为禁止指令重排,保证返回Singleton对象一定在创建对象后                    lazyMan = new LazyMan();        //这行代码存在的问题,不能保证原子性实际上会执行以下内容:                    //(1)在堆上开辟空间;(2)属性初始化;(3)引用指向对象                    //假设以上三个内容为三条单独指令,因指令重排可能会导致执行顺序为1->3->2(正常为1->2->3),当单例模式中存在普通变量需要在构造方法中进行初始化操作时,单线程情况下,顺序重排没有影响;但在多线程情况下,假如线程1执行lazyMan = new LazyMan()语句时先1再3,由于系统调度线程2的原因没来得及执行步骤2,但此时已有引用指向对象也就是lazyMan!=null,故线程2在第一次检查时不满足条件直接返回lazyMan,此时lazyMan为null                    //synchronized关键字可保证lazyMan = new LazyMan()语句执行顺序为123,因其为非原子性依旧可能存在系统调度问题(即执行步骤时被打断),但能确保的是只要lazyMan!=0,就表明一定执行了属性初始化操作;而若在步骤3之前被打断,此时lazyMan依旧为null,其他线程可进入第一层检查向下执行创建对象                }            }        }        return lazyMan;    }    public static void main(String[] args) {        for(int i=0;i<10;i++){            new Thread(()->{                lazyMan.getInstance();            }).start();        }    }}

 可以看到结果都是只有一个,按理来说是没有问题,实际上不是,上述标注行代码存在问题的,不是一个原子性操作。

        静态内部类单例:是不安全,存在问题的,是不安全,存在问题的(修改过的懒汉式单例也是如此)。

public class Inner {    private Inner(){}    public static Inner getInstance(){        return InnerClass.INNER;    }    public static class InnerClass{        private static final Inner INNER = new Inner();    }}

2、工厂方法模式:实例化对象不是用new,用工厂方法替代。将选择实现类,创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。

        简单工厂模式:用来生产同一等级架构中的任意产品(对于增加新的产品,需要修改已有代码)
在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例。

接下来创建一个接口,两个实现类,一个工厂,一个测试

//创建手机接口public interface Phone {    void name();}//创建华为实现类public class HuaWei implements Phone{    @Override    public void name() {        System.out.println("华为手机");    }}//创建小米实现类public class XiaoMi implements Phone{    @Override    public void name() {        System.out.println("小米手机");    }}//创建工厂public class PhoneFactory {    public static Phone getPhone(String phone){        if(phone.equals("华为")){            return new HuaWei();        }else if(phone.equals("小米")){            return  new XiaoMi();        }else {            return null;        }    }}//测试类public class Consumer {    public static void main(String[] args) {        Phone p1= PhoneFactory.getPhone("华为");        Phone p2= PhoneFactory.getPhone("小米");        p1.name();        p2.name();    }}

得到测试结果

        华为手机
        小米手机

我们通过创建一个PhoneFactory类,成功的完成工厂的创建。我们在创建对象时,也就不需要直接创建对象,而是可以通过创建工厂,这样大大的降低了代码的耦合性。但是,静态工厂模式是不能添加数据的。比如说,我们想添加一个“Oppo”手机类,你不直接修改PhoneFactory工厂代码,是不能实现的。所以,就有了第二种的工厂方法模式。

        工厂方法模式:用来生产同一等级架构中的固定产品,一个工厂等级结构可以负责多个不同产品等级结构中的产品对象的创建 。(支持增加任意产品)

//创建手机接口public interface Phone {    void name();}//创建华为实现类public class HuaWei implements Phone{    @Override    public void name() {        System.out.println("华为手机");    }}//创建手机工厂接口public interface PhoneFactory {    Phone getPhone();}//创建华为工厂public class HuaWeiFactory implements PhoneFactory{    @Override    public Phone getPhone() {        return new HuaWei();    }}//测试类public class Consumer {    public static void main(String[] args) {        Phone phone = new HuaWeiFactory().getPhone();        phone.name();    }}

得到测试结果

        华为手机

我们创建了手机工厂接口PhoneFactory,再创建华为工厂HuaWeiFactory实现工厂,这样就可以通过HuaWeiFactory创建对象。增加新的具体工厂和产品族很方便,比如说,我们想要增加小米,只需要创建一个小米工厂XiaoMiFactory实现手机工厂接口PhoneFactory,合理的解决的简单工厂模式不能修改代码的缺点。但是,在现实使用中,简单工厂模式占绝大多数。

简单工厂模式与工厂方法模式比较:

结构的复杂度:简单工厂模式占优。
代码的复杂度:简单工厂模式占优。
编程的复杂度:简单工厂模式占优。
管理的复杂的:简单工厂模式占优。
因此,虽然简单工厂模式不符合设计模式,但是实际使用远大于工厂方法模式

3、抽象工厂模式:抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口,无需指定它们具体的类(围绕一个超级工厂创建其他工厂,该超级工厂称为工厂的工厂)

抽象工厂模式得主要角色:

        1、抽象工厂(Abstract Factory)提供了创建产品的接口,它包含多个创建产品的方法 newProduct(),可以创建多个不同等级的产品。
2具体工厂(Concrete Factory)主要是实现抽象工厂中的多个抽象方法,完成具体产品的创建。
3抽象产品(Product)定义了产品的规范,描述了产品的主要特性和功能,抽象工厂模式有多个抽象产品。
4具体产品(ConcreteProduct)实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间是多对一的关系。

//电脑接口public interface Computer {    void play();    void watch();}//创建华为电脑对象public class HuaWeiComputer implements Computer{    @Override    public void play() {        System.out.println("HuaWei's play!");    }    @Override    public void watch() {        System.out.println("HuaWei's watch!");    }}//手机接口public interface Phone {    void send();    void call();}//创建华为手机对象public class HuaWeiPhone implements Phone{    @Override    public void send() {        System.out.println("HuaWei's send");    }    @Override    public void call() {        System.out.println("HuaWei's call");    }}//抽象工厂public interface IProductFactory {    //生产手机    Phone phone();    //生产电脑    Computer computer();}//创建华为工厂public class HuaWeiFactory implements IProductFactory{    @Override    public Phone phone() {        return new HuaWeiPhone();    }    @Override    public Computer computer() {        return new HuaWeiComputer();    }}//测试类public class Consumer {    public static void main(String[] args) {        HuaWeiFactory huaWeiFactory = new HuaWeiFactory();        Phone phone = huaWeiFactory.phone();        phone.call();        phone.send();        Computer computer = huaWeiFactory.computer();        computer.play();        computer.watch();    }}

得到测试结果

        HuaWei's call
        HuaWei's send
        HuaWei's play!
        HuaWei's watch!

我们通过创建一个抽象工厂完成了对具体工厂的创建,只需要传入参数就可以实例化对象。具体产品在应用层的代码隔离,无需关心创建的细节将一个系列的产品统一到一起创建。将一系列产品规划到一起创建。但是,抽象工厂模式也存在着缺点。规定了所有可能被创建的产品集合,产品簇中扩展新的产品困难,不可以增加产品,只能增加品牌。

4、代理模式:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。

        静态代理模式:

        角色分析:           

        1、抽象角色:一般会使用接口或抽象类来解决

        2、真实角色:被代理的角色

        3、代理角色:代理真实角色,代理真实角色后我们会进行一些附属操作

        4、访问角色:访问代理对象的人

//租房public interface Rent {    void rent();}//房东public class Master implements Rent{    @Override    public void rent() {        System.out.println("Master rent");    }}//中介public class Proxy implements Rent{    private Master master;    public Proxy() {    }    public Proxy(Master master) {        this.master = master;    }    @Override    public void rent() {        see();        master.rent();        fare();    }    //看房    public void see(){        System.out.println("see");    }    //收费    public void fare(){        System.out.println("fare");    }}//测试类public class Consumer {    public static void main(String[] args) {        Master master = new Master();        //进行代理        Proxy proxy = new Proxy(master);        //不需要通过对象,直接通过代理完成响应业务        proxy.rent();    }}

得到测试结果

        see
        Master rent
        fare

可以从上述代码看出,我们通过创建中介这一代理完成了租房,并且还有看房、收费的附属操作。我们不需要使用房东对象,通过使用代理中介就可以完成操作。 

代理模式优点:可以使真实角色的操作更加纯粹!不用去关注一些公共的业务,公共也就可以交给代理角色,实现了业务的分工,公共业务发生扩展的时候,方便集中管理!
代理模式缺点:一个真实角色就会产生一个代理角色;代码量会翻倍开发效率会变低,也许,这样无法理解到代理模式的好处。举个例子也许能更好理解,比如说我们想要在原有固定功能上新增业务,按照开闭原则我们是不能对原有代码进行修改的。但是我们可以通过代理模式,增加代理,在实现原有功能的情况下写入新的功能,创建对象时也就可以使用代理,完成操作。

 动态代理模式:虽然静态代理模式可以很好的解决开闭原则,但是每有一个真实角色就会产生一个代理,代码量翻倍过于臃肿,开发效率较低。因此,我们就使用动态代理模式进行设计。

//接口public interface IUserService {    void add();    void delete();    void update();    void query();}//实现类public class UserServiceImpl implements IUserService {    @Override    public void add() {        System.out.println("add");    }    @Override    public void delete() {        System.out.println("delete");    }    @Override    public void update() {        System.out.println("update");    }    @Override    public void query() {        System.out.println("query");    }}import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;//自动生成动态代理类模板public class ProxyInvocationHandler implements InvocationHandler {    //被代理接口    private Object target;       public void setTarget(Object target) {        this.target = target;    }     //得到代理类    public Object getProxy() {        return Proxy.newProxyInstance(getClass().getClassLoader(), target.getClass().getInterfaces(), this);    }    public void log(String s) {        System.out.println("[debug]:" + s);    }    //得到代理类    @Override    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {        log(method.getName());        Object result = method.invoke(target, args);        return result;    }}//测试类public class Consumer {    public static void main(String[] args) {        UserServiceImpl userService = new UserServiceImpl();        ProxyInvocationHandler handler = new ProxyInvocationHandler();        //设置代理对象        handler.setTarget(userService);        //生成代理类        IUserService proxy = (IUserService)handler.getProxy();        proxy.add();        proxy.query();    }}

得到测试结果

        [debug]:add
        add
        [debug]:query
        query

通过测试我们可以顺利的使用动态代理模式完成一系列操作,当我们想要添加附属操作时,我们只需要在模板中进行添加。优点:①可以使真实角色的操作更加纯粹!不用去关注一些公共的业务。②公共也就可以交给代理角色!实现了业务的分工。③公共业务发生扩展的时候,方便集中管理。④一个动态代理类代理的是一个接口,一般就是对应的一类业务。⑤一个动态代理类可以代理多个类,只要是实现了同一个接口即可!

5、装饰者模式:动态的将新功能附加到对象上。在对象功能的拓展方面,比继承更有弹性。同时装饰者模式也体现了开闭原则。

        角色分析:

        1、抽象构件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象。
        2、具体构件(ConcreteComponent)角色:实现抽象构件,通过装饰角色为其添加一些职责。
        3、抽象装饰(Decorator)角色:继承抽象构件,并包含具体构件的实例,可以通过其子类扩展具体构件的功能。
        4、具体装饰(ConcreteDecorator)角色:实现抽象装饰的相关方法,并给具体构件对象添加附加的责任。

//定义抽象类public abstract class Drink {    public abstract double cost();}//定义两个抽象类的实现类public class Juice extends Drink{    @Override    public double cost() {        System.out.println("juice: "+16);        return 16;    }}public class Milk extends Drink{    @Override    public double cost() {        System.out.println("milk: "+12);        return 12;    }}//定义装饰抽象类public abstract class Decorator extends Drink {    public abstract double cost();}//定义两个装饰具体实现类public class Chocolate extends Decorator{    private final static double COST = 4;    private Drink drink;    public Chocolate(Drink drink) {        this.drink = drink;    }    @Override    public double cost() {        System.out.println("chocolate:"+4);        return COST+drink.cost();    }}public class Pudding extends Decorator{    private final static double COST = 5;    private Drink drink;    public Pudding(Drink drink) {        this.drink = drink;    }    @Override    public double cost() {        System.out.println("pudding:"+5);        return COST+drink.cost();    }}//测试类public class Test {    public static void main(String[] args) {        Drink milk = new Milk();        milk = new Pudding(milk);        milk = new Chocolate(milk);        System.out.println(milk.cost());    }}

得到测试结果

        chocolate:4
        pudding:5
        milk: 12
        21.0

 

可以看到非常简单的就能够完成具体构件和具体装饰的组合。也可以看到结构也非常简洁明,具体构件在自己的package中,具体装饰也在自己的package中。我们不管是想要增加具体构件还是具体配饰,都可以在各自的package中添加。对已有的代码不需要进行任何操作,就算新加的有bug也不会影响原有代码的操作。

6、观察者模式:对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。

        观察者模式有点:

        1、降低了目标与观察者之间的耦合关系,两者之间是抽象耦合关系。符合依赖倒置原则。

        2、目标与观察者之间建立了一套触发机制。

//定义观察者接口public interface Observer {    void response();}//具体化观察者1public class Observer1 implements Observer{    @Override    public void response() {        System.out.println("Observer1 action");    }}//具体化观察者2public class Observer2 implements Observer{    @Override    public void response() {        System.out.println("Observer2 action");    }}//抽象目标public abstract class Subject {    //创建观察者集合    protected ArrayList array = new ArrayList();    //增加观察者    public void add(Observer observer){        array.add(observer);    }    //删除观察者    public void remove(Observer observer){        array.remove(observer);    }    //通知观察者方法    public abstract void notifyObserver();}//具体化目标public class Subject1 extends Subject{    @Override    public void notifyObserver() {        for (Observer observer :array){            observer.response();        }    }}//测试类public class Test {    public static void main(String[] args) {        Subject subject = new Subject1();        Observer obs1 = new Observer1();        Observer obs2 = new Observer2();        subject.add(obs1);        subject.add(obs2);        subject.notifyObserver();    }}

得到测试结果:

        Observer1 action
        Observer2 action

通过测试我们可以看到,我们不需要建立太多观察者和具体目标之间的联系,大大降低了目标与观察者之间的耦合关系。并且结构也十分简单明了,观察者和目标分别在各自的package包下。当我们想要添加观察者时,只需要在观察者包下进行添加,实现Observer接口就可以了。

7、责任链模式:一种处理请求的模式,它让多个处理器都有机会处理该诘求,直到其中某个处理成功为止。责任链模式把多个处理器串成链,然后让请求在链上传递。
        责任链模式的主要角色
        抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和一个后继连接。
        具体处理者(Concrete Handler)角色:实现抽象处理者的处理方法,判断能否处理本次请求,如果可以处理请求则处理,否则将该请求转给它的后继者。
        客户类(Client)角色:创建处理链,并向链头的具体处理者对象提交请求,它不关心处理细节和请求的传递过程。
        责任链模式优点
                降低了对象之间的耦合度。处理者不需要知道客户的任何信息,客户也不要知道处理者是如何实现方法的。
                提高了系统的灵活性。当我们想要新增处理器到整个链条中时,所付出的代价是非常小的
        责任链模式缺点
                降低了系统的性能。对比较长的职责链,请求的处理可能涉及多个处理对象
                不能保证每个请求一定被处理。由于一个请求没有明确的接收者,所以不能保证它一定会被处理,该请求可能一直传到链的末端都得不到处理。

//抽象处理者public abstract class Handler {    private Handler next;    public void setNext(Handler next) { this.next = next; }    public Handler getNext() { return next; }    //处理请求    public abstract void handleRequest(int info);}//具体处理者1public class Handler1 extends Handler{    @Override    public void handleRequest(int info) {        if (info <10){            System.out.println("Handler1完成处理");        }else {            if (getNext()!=null){                getNext().handleRequest(info);            }else {                System.out.println("没有处理者进行处理");            }        }    }}//具体处理者2public class Handler2 extends Handler{    @Override    public void handleRequest(int info) {        if (info <20&&info>10){            System.out.println("Handler2完成处理");        }else {            if (getNext()!=null){                getNext().handleRequest(info);            }else {                System.out.println("没有处理者进行处理");            }        }    }}测试类public class Test {    public static void main(String[] args) {        Handler handler1 = new Handler1();        Handler handler2 = new Handler2();        handler1.setNext(handler2);        handler1.handleRequest(5);        handler1.handleRequest(15);        handler1.handleRequest(25);    }}

得到测试结果:

Handler1完成处理
Handler2完成处理
没有处理者进行处理

通过测试结果我们看到,5交给了Handler1处理,15交给了Handler2处理,而25则没有处理者处理。请求者根本不需要参与处理,只需要提交数据就可以完成功能的处理,完全不需要管是哪个处理者进行处理的。当我们想要继续添加处理者时,这只需要再次添加就可以了,也不会对之前的代码造成影响。

来源地址:https://blog.csdn.net/a154555/article/details/125612512

--结束END--

本文标题: 七种常用的设计模式

本文链接: https://www.lsjlt.com/news/386147.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 七种常用的设计模式
    常用的七种设计模式:单例模式、工厂方法模式、抽象工厂模式、代理模式、装饰器模式、观察者模式和责任链模式。 设计模式分类 设计模式根据工作的目的,分为创建型模式、结构型模式和行为型模式三类。 创建型模式:单例模式、工厂方法模式、抽象工厂模式、...
    99+
    2023-08-31
    设计模式 java 单例模式
  • Java七种常用设计模式
    1、单例模式(Singleton Pattern) 单例模式是(Singleton Pattern)Java中最常用的设计模式之一,它保证一个类仅有一个实例,并提供一个全局访问点。 实现单例模式的核心是将类的构造方法私有化,以防止外部直接通...
    99+
    2023-08-16
    java 设计模式 单例模式
  • Python七大原则,24种设计模式
    七大原则,24种设计模式 七大设计原则: 1、单一职责原则【SINGLE RESPONSIBILITY PRINCIPLE】:一个类负责一项职责. 2、里氏替换原则【LISKOV SUBSTITUTION PRINCIPLE】...
    99+
    2023-01-31
    原则 模式 Python
  • Java设计模式常用的七大原则总结
    目录一、设计模式常用的七大原则二、单一职责原则三、接口隔离原则四、依赖倒转原则五、里氏替换原则六、开闭原则七、迪米特法则八、合成复用原则一、设计模式常用的七大原则 单一职责原则:一个...
    99+
    2022-11-12
  • java编程创建型设计模式单例模式的七种示例
    目录1.什么是单例模式?2.七种写法2.1 饿汉式(静态常量)2.2 饿汉式(静态代码块)2.3 懒汉式(线程不安全)2.4 懒汉式(线程安全,同步方法)2.5 双重校验锁2.6 静...
    99+
    2022-11-13
  • Spring中常用的9种设计模式介绍
    这篇文章主要介绍“Spring中常用的9种设计模式介绍”,在日常操作中,相信很多人在Spring中常用的9种设计模式介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Spring中常用的9种设计模式介绍”的疑...
    99+
    2023-06-02
  • spring中常用的九种设计模式是什么
    本篇内容主要讲解“spring中常用的九种设计模式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“spring中常用的九种设计模式是什么”吧!模板方法(Template Method)spr...
    99+
    2023-06-16
  • 浅谈Java设计模式之七大设计原则
    目录前言一、单一职责原则(SingleResponsibilityPrinciple,SRP)二、开闭原则(Open-ClosedPrinciple,OCP)三、里氏代换原则(Lis...
    99+
    2022-11-12
  • java常用的设计模式
    设计模式一般都比较抽象,本文结合现实生活的实例简单对设计模式进行阐述。[@more@]FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四...
    99+
    2023-06-03
  • java设计模式--七大原则详解
    目录设计模式单一职责原则接口隔离原则依赖倒转原则里氏替换原则开闭原则迪米特法则合成复用原则总结设计模式 软件设计模式(Design pattern),又称设计模式,是一套被反复使用、...
    99+
    2022-11-12
  • 一次讲全!Java常见的23种设计模式
    、什么是设计模式:         设计模式是一套经过反复使用的代码设计经验,目的是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 设计模式于己于人于系统都是多赢的,它使得代码编写真正工程化,它是软件工程的基石,如同大厦的一块块砖石...
    99+
    2023-10-20
    java 设计模式 开发语言
  • Java中23种设计模式
    一、创建型模式 1.单例模式(Singleton Pattern) 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这...
    99+
    2023-08-31
    java 设计模式
  • Java中常用的设计模式之模板模式详解
    目录优点缺点使用场景一、实现方式1、游戏抽象类2、LOL游戏类3、CF游戏类二、测试总结优点 封装不变部分,扩展可变部分。 提取公共代码,便于维护。 行为由父类控制,子类实现。 缺点...
    99+
    2022-11-13
  • Java设计模式中的七大原则详细讲解
    目录1.开闭原则(软件设计第一原则) 2.依赖倒置原则3.里氏替换原则4.合成复用原则5.接口隔离原则6.迪米特法则7.单一职责原则设计模式要进行共性与可变性的分析,对共性...
    99+
    2023-02-17
    Java设计模式七大原则 Java设计模式中原则 Java设计模式
  • RabbitMQ 的七种队列模式和应用场景
    目录七种模式介绍与应用场景 简单模式(Hello World)工作队列模式(Work queues)订阅模式(Publish/Subscribe)路由模式(Routing)...
    99+
    2022-11-12
  • JAVA 23种设计模式示例
    目录 一.单例模式 二.工厂方法模式 三.抽象工厂模式 四.建造者模式 五.原型模式 六.享元模式 七.门面模式 八.适配器模式 九.装饰者模式 十.策略模式 十一.模板方法模式 十二.观察者模式 十三.责任链模式 十四.代理模式 十五....
    99+
    2023-10-01
    java 设计模式 单例模式 工厂模式 代理模式
  • java设计模式--三种工厂模式详解
    目录简单工厂代码:1.产品接口2.产品接口实现子类3.简单工厂类4.调用工厂5.测试工厂方法代码:1.工厂接口2.工厂实现子类3.产品接口4.产品实现子类5.调用6.测试1.产品接口...
    99+
    2022-11-12
  • 23种设计模式(15)java解释器模式
    23种设计模式第十五篇:java解释器模式定义:给定一种语言,定义他的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中句子。类型:行为类模式类图:      &nb...
    99+
    2023-05-30
    java 解释器模式 ava
  • 软件工程(十七) 行为型设计模式(三)
    1、观察者模式 简要说明 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新 速记关键字 联动,广播消息 类图如下 基于上面的类图,我们来实现一个监听器。类图中的Subject对应我们的被...
    99+
    2023-08-30
    软件工程 设计模式
  • java设计模式中常用的原则
    1)单一职责原则降低类的复杂度,一个类只负责一项职责,提高类的可读性,可维护性,降低类变更引起的风险,通常情况下,我们应当遵守单一职责原则,只有类逻辑足够简单,可以违反单一职责原则,若类的方法数量比较少,可以在方法级别保持单一原则。2)接口...
    99+
    2015-08-28
    java入门 java 设计模式 原则
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作