美文网首页
面向对象设计原则/常用设计模式

面向对象设计原则/常用设计模式

作者: 哇楼主 | 来源:发表于2019-10-16 15:37 被阅读0次

    面向对象设计原则

    • 开闭原则:软件应该对扩展开放,对修改关闭。也就是说当我们新加一个需求的时候,我们在不改变源代码的前提下,可以扩展模块的功能,使其满足需求
      好处:只需对扩展的代码测试,提高代码的服用行和可维护性
    • 里氏替换原则:子类可以扩展父类的功能,但不能改变父类原有功能
    • 依赖倒置原则:使用接口或者抽象类的目的是制定好规范和契约,而不去涉及任何具体的操作,把展现细节的任务交给它们的实现类去完成。依赖倒置原则的目的是通过要面向接口的编程来降低类间的耦合性
    • 单一职责原则:一个类只负责一项职责
    • 接口隔离原则:要为各个类建立它们需要的专用接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。
    • 迪米特法则:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。
    • 合成复用原则:它要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。

    常用设计模式:

    • 单例模式:一个类只有一个实例,并且该类能自行创建这个实例的模式
    public class Singleton {
    //构造方法私有化,防止在外部被实例化
    private Singleton() {}
    
    private static volatile Singleton instance = null;
    
    public static synchronized Singleton getInstance(){//同步,保证多线程唯一
        if (instance == null){
            instance = new Singleton();
        }
        return instance;
    }
    }
    
    • 抽象工厂模式:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。
    interface AbstractFactory
    {
    public Product1 newProduct1();
    public Product2 newProduct2();
    }
    class ConcreteFactory1 implements AbstractFactory
    {
     public Product1 newProduct1()
     {
        System.out.println("具体工厂 1 生成-->具体产品 11...");
        return new ConcreteProduct11();
     }
     public Product2 newProduct2()
     {
        System.out.println("具体工厂 1 生成-->具体产品 21...");
        return new ConcreteProduct21();
      }
     }
    
    • 建造者模式:将一个复杂对象的构造与他的表示分离,使同样的创建过程可以有不同的表示
    • 代理模式:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。
    public class ProxyTest
    {
    public static void main(String[] args)
    {
        Proxy proxy=new Proxy();
        proxy.Request();
    }
    }
    //抽象主题
    interface Subject
    {
    void Request();
    }
    //真实主题
    class RealSubject implements Subject
    {
    public void Request()
    {
        System.out.println("访问真实主题方法...");
    }
    }
    //代理
    class Proxy implements Subject
    {
    private RealSubject realSubject;
    public void Request()
    {
        if (realSubject==null)
        {
            realSubject=new RealSubject();
        }
        preRequest();
        realSubject.Request();
        postRequest();
    }
    public void preRequest()
    {
        System.out.println("访问真实主题之前的预处理。");
    }
    public void postRequest()
    {
        System.out.println("访问真实主题之后的后续处理。");
    }
    }
    
    • 适配器模式:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作
    //目标接口
    interface Target
    {
    public void request();
    }
    //适配者接口
    class Adaptee
    {
    public void specificRequest()
    {       
        System.out.println("适配者中的业务代码被调用!");
    }
    }
    //类适配器类
    class ClassAdapter extends Adaptee implements Target
    {
    public void request()
    {
        specificRequest();
    }
    }
    //客户端代码
     public class ClassAdapterTest
    {
     public static void main(String[] args)
    {
        System.out.println("类适配器模式测试:");
        Target target = new ClassAdapter();
        target.request();
    }
    }
    
    • 观察者模式:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新

    相关文章

      网友评论

          本文标题:面向对象设计原则/常用设计模式

          本文链接:https://www.haomeiwen.com/subject/hccumctx.html