设计模式七大原则 - 面试宝典

举报
皮牙子抓饭 发表于 2023/08/16 09:22:11 2023/08/16
【摘要】 设计模式七大原则是软件设计中的基本准则,用于指导设计模式的正确应用。这七大原则分别是:单一职责原则(Single Responsibility Principle,SRP):一个类应该只负责一项职责,即一个类应该只有一个引起它变化的原因。开放封闭原则(Open-Closed Principle,OCP):软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。即应通过扩展来实现变化,而不是通...

设计模式七大原则是软件设计中的基本准则,用于指导设计模式的正确应用。这七大原则分别是:

  1. 单一职责原则(Single Responsibility Principle,SRP):一个类应该只负责一项职责,即一个类应该只有一个引起它变化的原因。
  2. 开放封闭原则(Open-Closed Principle,OCP):软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。即应通过扩展来实现变化,而不是通过修改已有代码来实现。
  3. 里氏替换原则(Liskov Substitution Principle,LSP):子类必须能够替换掉它们的父类。即在使用父类对象的地方,可以用子类对象替代,而不会产生任何错误或异常。
  4. 依赖倒置原则(Dependency Inversion Principle,DIP):高层模块不应该依赖低层模块,二者都应该依赖于抽象。即要面向接口编程,而不是面向实现编程。
  5. 接口隔离原则(Interface Segregation Principle,ISP):客户端不应该依赖它不需要的接口。即一个类对另一个类的依赖应该建立在最小的接口上。
  6. 迪米特法则(Law of Demeter,LoD):一个对象应该对其他对象有尽可能少的了解。即只与直接的朋友通信,不与陌生人通信。
  7. 合成复用原则(Composite Reuse Principle,CRP):尽量使用对象组合,而不是继承来达到复用的目的。即要优先使用组合/聚合关系,而不是继承关系。 以上七大原则是软件设计中的重要准则,遵循这些原则可以提高软件的可维护性、可扩展性和可复用性。

以下是一个简单的代码示例,展示如何通过设计模式的原则来设计一个简单的登录系统:

javaCopy code// 单一职责原则示例
class User {
    private String username;
    private String password;
    
    public boolean login(String username, String password) {
        // 登录逻辑
        return false;
    }
}
// 开放封闭原则示例
interface UserRepository {
    boolean exists(String username);
}
class UserRepositoryImpl implements UserRepository {
    @Override
    public boolean exists(String username) {
        // 检查用户是否存在的逻辑
        return false;
    }
}
class LoginService {
    private UserRepository userRepository;
    
    public LoginService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
    
    public boolean login(String username, String password) {
        if (userRepository.exists(username)) {
            // 登录逻辑
            return false;
        }
        return false;
    }
}
// 依赖倒置原则示例
interface UserService {
    boolean login(String username, String password);
}
class UserServiceImpl implements UserService {
    private UserRepository userRepository;
    
    public UserServiceImpl(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
    
    @Override
    public boolean login(String username, String password) {
        if (userRepository.exists(username)) {
            // 登录逻辑
            return false;
        }
        return false;
    }
}
// 接口隔离原则示例
interface Login {
    boolean login(String username, String password);
}
interface Register {
    boolean register(String username, String password);
}
class UserServiceImpl implements Login, Register {
    private UserRepository userRepository;
    
    public UserServiceImpl(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
    
    @Override
    public boolean login(String username, String password) {
        if (userRepository.exists(username)) {
            // 登录逻辑
            return false;
        }
        return false;
    }
    
    @Override
    public boolean register(String username, String password) {
        // 注册逻辑
        return false;
    }
}
// 迪米特法则示例
class LoginService {
    private UserService userService;
    
    public LoginService(UserService userService) {
        this.userService = userService;
    }
    
    public boolean login(String username, String password) {
        return userService.login(username, password);
    }
}
// 合成复用原则示例
class User {
    private String username;
    private String password;
    
    // 其他属性和方法
    
    public boolean login() {
        // 登录逻辑
        return false;
    }
}
class LoginService {
    private User user;
    
    public LoginService(User user) {
        this.user = user;
    }
    
    public boolean login(String username, String password) {
        user.setUsername(username);
        user.setPassword(password);
        return user.login();
    }
}

以上代码示例展示了如何通过设计模式的原则来设计一个简单的登录系统。每个原则都有对应的示例代码,展示了如何应用该原则来设计系统。这些原则可以帮助我们设计出更具可维护性、可扩展性和可复用性的软件系统。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。