其他分享
首页 > 其他分享> > 面向对象六大设计原则和设计模式,持续更新中

面向对象六大设计原则和设计模式,持续更新中

作者:互联网

设计原则与设计模式

六大设计原则

1、单一职责

​ 一个类只能有且仅有一个引起他变化的原因。即一个类只负责一件事。多继承违背了单一职责。

​ 如果一类或对象承担有过多职责,则一个职责的变换可能会削弱或抑制其他职责,耦合性高;当需要一个只负责一个职责的对象时,需要实现其所有职责,造成代码的冗余。

优点:

2、开闭原则

​ 软件应对扩展开放,对修改关闭。

实现方法:

​ 通过抽象约束、封装变化来实现开闭原则,即通过接口或者抽象类为软件实体定义一个相对稳定的抽象层,将相同的可变因素封装在具体实现类中。尽可能的抽象合理。、

作用:

​ 提高代码的可复用性,提高软件的可维护性,方便扩展代码或功能的测试。

3、接口隔离原则

​ 客户端不应该被迫依赖于它不需要的方法。一个类对另一个类的依赖应建立在最小的接口上。需要对接口进行拆分。(单一职责是对对象或类进行拆分)即为各个类建立专门的接口而不是实现一个庞大的功能众多的接口。

接口隔离原则和单一职责的不同

4、依赖倒置

​ 高层模块不应依赖于底层模块,两者都应依赖于其抽象。抽象不应依赖于细节,细节依赖于抽象。核心为:面向接口编程。

​ 由于细节具有多变性,抽象相对稳定,因此以抽象为基础搭建出的结构比细节为基础搭建的架构要稳定的多。抽象指的是:抽象类或接口,细节指的是实现类。

作用:

5、里氏替换

保证继承时超类的所有性质在子类中仍然成立,是对开闭原则的补充。其定义:

作用:
实现方法

​ 关于里氏替换原则的例子,最有名的是“正方形不是长方形”。当然,生活中也有很多类似的例子,例如,企鹅、鸵鸟和几维鸟从生物学的角度来划分,它们属于鸟类;但从类的继承关系来看,由于它们不能继承“鸟”会飞的功能,所以它们不能定义成“鸟”的子类。同样,由于“气球鱼”不会游泳,所以不能定义成“鱼”的子类;“玩具炮”炸不了敌人,所以不能定义成“炮”的子类等。

例如“几维鸟不是鸟”

迪米特法则

​ 最少知识原则:一个对象尽可能对其他对象尽可能少的了解。对象之间的耦合性降到最低。类与类的关系越密切,耦合性就越高。

​ 如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。

优点:
实现:

强调以下两点:

实现时注意:

例如明星与经纪人的关系示例。明星的日常事务由经纪人处理,明星不直接和媒体公司和粉丝进行交涉。

设计模式:

单例模式:

定义:

​ 一个类只能有一个实例,且该类能够自行创建这个实例。

特点:
优缺点:
优点:
缺点:
应用场景:
实现:

​ 将类的构造设为私有,外部类就无法调用类的构造函数,也就无法生成多个实例。类自身定义一个静态私有实例,并向外提供一个静态的公有函数用于创建或获取该静态私有实例。

懒汉模式:
public class LazySingleton{
    private static volatile LazySingleton instance = null;
    
    private LazySingleton(){
    }
    
    public static synchronized LazySingleton getInstance(){
        if(instance == null){
            instance = new LazySingleton();
        }
        return instance;
    }
}
饿汉模式:
public class HungrySingleton{
    private static final HungrySingleton instance = new HungrySingleton();
    
    private HungrySingleton(){
    }
    
    public static HungrySingleton getInstance(){
        return instance;
    }
}

原型模式:

定义:

​ 用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或者相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无需知道创建对象的具体细节。

优缺点:
优点:

​ Java自带的原型模式基于二进制流的复制,在性能上比直接new一个新对象更加优良。

​ 可以使用深克隆方式保存对象的状态,使用原型模式将对象复制一份,并将其状态保存起来,简化了创建的过程,以便在需要的时 候使用(如恢复),可辅助实现撤销操作。

缺点:
实现:

​ 原型模式主要包括3个主要角色:

  1. 抽象原型类:具体原型对象必须实现的接口Cloneable
  2. 具体原型类:实现原型类的clone方法,它是可被复制的方法。
  3. 访问类:使用具体原型类中的clone方法来复制新的对象
//具体原型类
class Realizetype implements Cloneable {
    Realizetype() {
        System.out.println("具体原型创建成功!");
    }
    public Object clone() throws CloneNotSupportedException {
        System.out.println("具体原型复制成功!");
        return (Realizetype) super.clone();
    }
}
//原型模式的测试类
public class PrototypeTest {
    public static void main(String[] args) throws CloneNotSupportedException {
        Realizetype obj1 = new Realizetype();
        Realizetype obj2 = (Realizetype) obj1.clone();
        System.out.println("obj1==obj2?" + (obj1 == obj2));
    }
}

标签:六大,职责,对象,面向对象,实例,原型,单例,抽象,设计模式
来源: https://blog.csdn.net/qq_45728449/article/details/120626063