当前位置: 移动技术网 > IT编程>软件设计>设计模式 > 设计模式七大原则(1.2)

设计模式七大原则(1.2)

2019年08月08日  | 移动技术网IT编程  | 我要评论
设计原则的目的是构建出更加稳定和健壮的软件。而像这样的软件要求 - 松耦合 - 可扩展性强 ...

---恢复内容开始---

设计原则核心思想

设计原则的目的是构建出更加稳定和健壮的软件。而像这样的软件要求

  • 松耦合
  • 可扩展性强

1.单一职责原则


什么是单一职责原则?

在java语言中:一个类只负责一项功能。

单一职责原则的目的

通过降低类的复杂度从而提高类的可读性,可扩展性

单一职责的粒度(类与方法)

通常情况下遵守单一职责原则是在类的粒度上的,但是当代码逻辑足够简单的情况下,可在方法上保持单一职责原则。



2.接口隔离原则


接口与接口隔离

接口的作用之一是规范类,实现类的松耦合,进而实现软件的松耦合。

换句话说,接口隔离也是一种单一职责原则的实现。

接口隔离原则的目的

接口隔离原则的要求就是明确接口功能,尽可能细分接口。

接口的细化直接导致整个系统灵活性,但同时会带来结构的复杂性。

比如说预先定义了10个接口,为了满足接口隔离而将接口分成20个。那么类在实现接口上会变得更加灵活,但接口的增多会导致结构的复杂性。




3.依赖倒置原则


依赖于抽象,不要依赖于具体。


依赖倒置的是什么?

类与类之间依赖变为类对接口的依赖。

[from 百度百科]

目的

解耦,增强模块复用性。

依赖倒置原则的思想与spring ioc容器机制相呼应,类对于接口的依赖降低了类之间的耦合性,而ioc中类对于容器的依赖同样解决了类之间高耦合的问题。


依赖关系传递的三种方式

  • 接口传递
  • 构造方法传递
  • setter传递
//接口传递
interface car
{
    void drive();
}

interface person
{
    void lunch(car car);
}


//构造方法传递

interface bicycle
{
    void ride();
}

class tom
{
    private bicycle bicycle;

    tom(bicycle bicycle)
    {
        this.bicycle=bicycle;

    }

}

//setter方法传递

interface weather
{
    void sun();
}

class today
{
    private weather weather;

    public void setweather(weather weather) {
        this.weather = weather;
    }
}



4.里氏替换原则


继承的利与弊

利:实现了代码重用,更加方便的实现了功能扩展。
弊:增强了类之间的耦合性


什么是里氏替换原则?

在子类中尽量不要重写父类的方法。

如果不得不重写,可提取出基类共同继承。另外也可通过聚合,依赖,组合的方式替代继承。

class a
{
    public void a1(){
        
    }
    public void a2(){
        
    }
    
}

class b extends a
{
    @override
    public void a1()
    {
        
    }
    
}

//提取基类后

class base
{
    public void a2
    {
        
    }
}
class a extends base
{
    public void a1(){

    }
}

class b extends base
{
    public void a1(){

    }
}



5.开闭原则


什么是开闭原则?

对扩展开放,对修改关闭。

通俗的说,在软件功能需要扩展时,尽量增加代码,而不是修改原有代码。


for example

abstract class action
{
    abstract public void action();
}

class describe
{
    public void describe(action action)
    {
        action.action();
    }
}

class a extends action
{
    public void action()
    {
        system.out.println("跑步");
    }
}
class b extends action
{
    public void action()
    {
        system.out.println("瑜伽");
    }
}
class c extends action
{
    public void action()
    {
        system.out.println("健身");
    }
}

class x extends action
{
    public void action()
    {
        system.out.println("xxx");
    }
}



public class main
{
    public static void main(string[] args)
    {
        describe describe = new describe();
        describe.describe(new a());
        describe.describe(new b());
        describe.describe(new c());
        describe.describe(new x());
    }
}

定义一个抽象类,其中有action方法,abc类都有各自的行为,继承抽象类后重写方法。这些需要扩展新功能时只需新加一个像x一样的类就可以了。基本上不需要修改任何位置,只是扩展了功能。


6.迪米特原则(最少知识原则)


什么是迪米特原则?

一个对象应该对其他对象保持最少的了解。


表现形式

只与直接的朋友通信。

直接的朋友:除了出现在局部变量的类之外,都是直接朋友。

换句话说:迪米特法则要求局部变量中最好不要出现陌生的类。

目的

降低类之间的耦合。(耦合只能尽量降低,无法消除)


7.合成复用原则

尽量使用合成/聚合代替继承。

合成/聚合:某种类与类之间建立联系的方式。其耦合度低于继承。



参考资料:
【设计模式之六大原则——接口隔离原则(isp)】https://www.cnblogs.com/muzongyan/archive/2010/08/04/1792528.html
【依赖倒置原则】https://baike.baidu.com/item/%e4%be%9d%e8%b5%96%e5%80%92%e7%bd%ae%e5%8e%9f%e5%88%99/6189149?fr=aladdin#2
【面向对象原则之一 依赖倒置原则】https://www.cnblogs.com/alunchen/p/7110116.html
【对依赖倒置原则(dip)及ioc、di、ioc容器的一些理解】https://www.cnblogs.com/lichenwei/p/3943960.html
【里氏替换原则】https://www.sogou.com/link?url=hedjjac291ofpyafzyfli4kqwvqt63nbg8shiipqj6s7q4pykumkig..

---恢复内容结束---

# 设计原则核心思想


设计原则的目的是构建出更加稳定和健壮的软件。而像这样的软件要求

  • 松耦合
  • 可扩展性强

参考资料:
【设计模式之六大原则——接口隔离原则(isp)】https://www.cnblogs.com/muzongyan/archive/2010/08/04/1792528.html
【依赖倒置原则】https://baike.baidu.com/item/%e4%be%9d%e8%b5%96%e5%80%92%e7%bd%ae%e5%8e%9f%e5%88%99/6189149?fr=aladdin#2
【面向对象原则之一 依赖倒置原则】https://www.cnblogs.com/alunchen/p/7110116.html
【对依赖倒置原则(dip)及ioc、di、ioc容器的一些理解】https://www.cnblogs.com/lichenwei/p/3943960.html
【里氏替换原则】https://www.sogou.com/link?url=hedjjac291ofpyafzyfli4kqwvqt63nbg8shiipqj6s7q4pykumkig..

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网