设计模式(一)之设计原则

设计模式

什么是设计模式

设计模式是指再软件开发中,经过验证的,用于解决再特定环境下,重复出现的,特定问题的解决方案。

设计模式的基础

基本上就是类模型之间的关系是设计模式的基础

类模型一

class Subject:public Base {
};
class Subject {
	private:
		Base base;

};
class Base {
	publicvirtual void func1(){}
		virtual void func2 () {}
		int a;
}

以上两种类模型,一种是继承,一种是在一个类中定义另一个类的对象,这两种类模型的内存分布如下所示
在这里插入图片描述

类模型二

class Subject {
	private :
		Base *base;
};
class Base {
	publicvirtual void func1(){}
		virtual void func2 () {}
		int a;
}

此模型就是在一个类中定义另一个类的对象指针,其内存分布如下所示
在这里插入图片描述

类模式三

在这里插入图片描述

在这里插入图片描述

类关系

毫不相关的类,父子类,友元类

设计原则

依赖倒置原则

高层模块不应该依赖低层模块,两者都应该依赖抽象;
抽象不应该依赖具体实现,具体实现应该依赖于抽象;
以自动驾驶公司 为高层,汽车生产商为底层。自动驾驶公司不应该依赖与汽车生产商,为每一种汽车设定自动驾驶算法。而是创建一个自动驾驶的标准,此为抽象,两者都应该依赖于他。

开放封闭原则

一个类应该对扩展开放,对修改关闭

客户端使用服务器,或者叫使用服务器提供的服务。客户端直接依赖于服务。这会形成,一旦由另外一个提供程序服务,则客户端也须要修改。当增加了Client Interface后,这个系统对增长另外一种服务是开放的,对修改原有的调用代码是封闭的。Client不须要修改,就能使用新的服务。
实现一个client的虚拟接口

interface IClient{  
    public String action();  
}

class Server1 public IClient{  
    public String action(){  
        return "I'm server 1 to provide service";  
    }  
}  
class Server2 public IClient{  
    public String action(){  
        return "I'm server 2 to provide service";  
    }  
}  
  
class Client{  
    public void (IClient clientInf){  
        System.out.println("Start to call server");  
        System.out.println(clientInf.action());  
    }  
} 

面向接口

不将变量类型声明为某个特定的具体类,而是声明为某个接口;
客户程序无需获知对象的具体类型,只需要知道对象所具有的接口;
减少系统中各部分的依赖关系,从而实现“高内聚、松耦合”的类型设计方案;

封装变化点

将稳定点和变化点分离,扩展修改变化点;让稳定点和变化点的实现层次分离;

单一职责

一个类应该仅有一个引起它变化的原因;

里氏替换

子类型必须能够替换掉它的父类型;主要出现在子类覆盖父类实现,原来使用父类型的程序可能出
现错误;覆盖了父类方法却没有实现父类方法的职责;

接口隔离

不应该强迫客户依赖于它们不用的方法;一般用于处理一个类拥有比较多的接口,而这些接口涉及到很多职责;

组合优于继承

继承耦合度高,组合耦合度低;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值