设计模式笔记

参考:
http://blog.csdn.net/column/details/design.html
http://blog.csdn.net/zhengzhb/article/details/7278174
http://blog.csdn.net/column/details/mydesignpattern.html

面象对象间的关系

依赖: 一个对象作为另一个对象方法的方法参数,局部变量等.
关联、聚合和组合 ,即对象包含另外一个对象
泛化,即继承.

设计6大准则

1 单一职责

一个类就完成一个或者一类功能

Liscov里氏替换原则

子类可以扩展父类的功能,但不能改变父类原有的功能

2 面向接口编程

依赖倒置原则的核心思想是面向接口编程
应用层的逻辑不发生改变,改变其依赖的底层组件(接口),从而改变特定功能
某逻辑依赖某个组建(BASE抽象类,接口类,仅有方法).

3 狄米特法则

个对象应该对其他对象保持最少的了解,尽量降低类与类之间的耦合

开闭准则(open-close)

一个软件实体如类、模块和函数应该对扩展开放,对修改关闭

4 接口隔离准则

定义:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。
问题由来:类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类D必须去实现他们不需要的方法。
解决方案:将臃肿的接口I拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则

设计模式

为何要设计模式,可扩展性,大型程序构建。
尴尬的是有时引入了设计模式去解决扩展性A,结果A没解决,需要解决的扩展性B没解决,代码反而冗余了,慎用。

1-4属于创建类模式。
5-x属于行为类模式。

单例模式

解决问题: 某些全局功能的类,仅需要一个实体就好。

饿汉模式 开始就生成好
懒汉模式 真正要用的时候才new

//m_instane和getInstance都是static成员
timerRunner* timerRunner::m_instance = NULL;
timerRunner* timerRunner::getInstance(void)
{
    if(NULL == m_instance) 
    {
        pthread_mutex_lock(&mutex);
        if(NULL == m_instance) 
        {
            m_instance = new timerRunner(128);
        }
        pthread_mutex_unlock(&mutex);
    }
    return m_instance;
}
工厂模式

工厂就是类对象的生产器,管理复杂的对象生成,将具体实例化封装起来,所有对象的new由它来做,而不使用具体类去new各自对象。使用时,先new出工厂,工厂再生产出需要的类。

例子:

A 面食

A1 面条

AA1 儿童面条

B1 饺子

C 西餐

牛排
沙拉

简单工厂模式:
面食仅用一个工厂来生产.用choice选择不同面食,增加面食时,需要修改工厂

class Factory  {
    Mianshi* produceMianshi(int choice) {
    if(choice == Miantiao)
    if(choice == 饺子)
}

工厂方法模式:
有一个抽象厂,new出不同厂生产不同的面食,需要新的面食就new新的工厂,不修改原来的工厂。

class MianshiFactory {
   
    virtual Mianshi* produceMianshi() = 0;
}
class MiantiaoFactory : pubcic MianshiFactory {
   
    Miantiao* produceMianshi() {
  return new Miantiao();};
}
class JiaoziFactory : pubcic MianshiFactory {
   
    Jiaozi* produceMianshi() {
  return new Jiaozi();};
}

抽象工厂模式
扩展抽象工厂.不但可以产面,还可以产西餐,就看派生工厂怎么用了


class SyanticFactory {
    virtual Mianshi* produceMianshi() = 0;
    virtual Mianshi* produceXican() = 0;
}

组合工厂模式
定义新的抽象工厂,比扩展抽象工厂更灵活。增加个西餐抽象厂 ,厂功能自由组合,比如厂既可以生产饺子,又可以生产牛排.有可以只生产一样。
(遵循职责单一,接口隔离原则)

class BestFactory: public MianshiFacotory , public XicanFactory {
  ...}

封装的含义:做面条要用到水,面,调料,这些new都封装在new Miantiao()里。

Maintiao* produceMaintiao() 
{
    Shui * s = new Shui();
    Mian * m=  new Mian();
    Liao * l=  new Liao();
}
建造者模式

和工厂模式极为类似。
感觉比抽象工厂就多了个Director
原来是new新的工厂,现在Director来接管和管理工厂的new,再封装一层。
4要素:

Product
AbsBuilder
Builder
Director

原型模式

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。其中有一个词很重要,那就是拷贝。可以说,拷贝是原型模式的精髓所在。
原型模式实现,java里

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值