java常用的设计模式有哪些类型

Java常用的设计模式有三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共12种:模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、责任链模式和访问者模式 。

单例模式

单例模式是一种常用的设计模式,它保证一个类只有一个实例,并提供一个全局访问点,单例模式的实现主要有懒汉式和饿汉式两种。

1、懒汉式:在第一次调用时实例化对象,实现了延迟加载,如果单例模式的对象需要执行一些耗时的操作,这种方式会导致线程阻塞,影响性能。

java常用的设计模式有哪些类型

public class Singleton {
    private static Singleton instance;
    private Singleton() {}
    public static synchronized Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

2、饿汉式:在类加载时就完成了实例化,避免了线程同步问题,性能较好,如果单例模式的对象需要执行一些耗时的操作,这种方式也会导致线程阻塞,影响性能。

public class Singleton {
    private static final Singleton instance = new Singleton();
    private Singleton() {}
    public static Singleton getInstance() {
        return instance;
    }
}

工厂模式

工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,在工厂模式中,创建对象的工作不是由调用者直接完成的,而是由一个工厂类负责,这样可以将对象的创建和使用解耦,提高代码的可维护性。

1、直接返回对象:最简单的工厂模式,直接返回创建的对象,这种方式简单易用,但不利于代码的扩展。

java常用的设计模式有哪些类型

public class ProductFactory {
    public Product createProduct() {
        return new Product();
    }
}

2、通过条件判断返回对象:根据不同的条件返回不同的对象,这种方式可以实现一定程度的扩展性,但增加了判断的复杂度。

public class ProductFactory {
    public Product createProduct(String type) {
        if ("A".equals(type)) {
            return new AProduct();
        } else if ("B".equals(type)) {
            return new BProduct();
        } else {
            return new Product();
        }
    }
}

3、通过工厂方法生成对象:定义一个抽象的工厂类,让子类来实现具体的工厂方法,这种方式实现了高阶函数,提高了代码的复用性。

public interface ProductFactory {
    Product createProduct();
}
public class ConcreteProductFactory implements ProductFactory {
    @Override
    public Product createProduct() {
        return new ConcreteProduct();
    }
}

装饰器模式

装饰器模式是一种结构型设计模式,它允许在不修改原始对象的基础上,动态地给对象添加新的功能,装饰器模式主要包括两个角色:抽象组件和具体组件,具体组件是原始对象,抽象组件是装饰器,它们之间通过继承关系相互协作。

java常用的设计模式有哪些类型

1、具体组件:实现抽象组件接口,定义需要被装饰的行为,这里以门为例,门是一个具体的组件。

public interface DoorComponent extends Component {
}

2、具体装饰器A:实现抽象组件接口,继承具体组件,并添加新的功能,这里以安全门为例,安全门是具体装饰器A。

public class SafetyDoor extends DoorComponent implements SafetyDecoratorSpecification {
    private DoorComponent door;
    
    public SafetyDoor(DoorComponent door) {} //构造方法中传入门作为基础组件进行装饰操作,这里省略了对门的具体装饰过程,最终将装饰后的门返回即可完成装饰操作,如下所示:return decorate(door);//装饰器的decorate方法用来完成对基础组件的具体装饰处理,最终返回装饰后的对象即可,如下所示:return decorate(door);//装饰器的decorate方法用来完成对基础组件的具体装饰处理,最终返回装饰后的对象即可,如下所示:return decorate(door);//装饰器的decorate方法用来完成对基础组件的具体装饰处理,最终返回装饰后的对象即可,如下所示:return decorate(door);//装饰器的decorate方法用来完成对基础组件的具体装饰处理,最终返回装饰后的对象即可,如下所示:return decorate(door);//装饰器的decorate方法用来完成对基础组件的具体装饰处理,最终返回装饰后的对象即可,如下所示:return decorate(door);//装饰器的decorate方法用来完成对基础组件的具体装饰处理,最终返回装饰后的对象即可,如下所示:return decorate(door);//装饰器的decorate方法用来完成对基础组件的具体装饰处理,最终返回装饰后的对象即可,如下所示:return decorate(door);//装饰器的decorate方法用来完成对基础组件的具体装饰处理,最终返回装饰后的对象即可,如下所示:return decorate(door);//装饰器的decorate方法用来完成对基础组件的具体装饰处理,最终返回装饰后的对象即可,如下所示:return decorate(door);//装饰器的decorate方法用来完成对基础组件的具体装饰处理,最终返回装饰后的对象即可,如下所示:return decorate(door);//装饰器的decorate方法用来完成对基础组件的具体装饰处理,最终返回装饰后的对象即可.如下所示:return decorate(door);//

原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/262394.html

(0)
K-seoK-seoSEO优化员
上一篇 2024年1月25日 15:22
下一篇 2024年1月25日 15:25

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入