简单介绍几个设计模式(大部分编程语言都可以有这些设计思想)

一、工厂模式

 1、在创建对象时不会对客户端暴露创建逻辑,并且通过使用一个共同的接口来指向新创建的对象。

2、定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。

3、主要解决接口选择问题,不同条件下创建不同实例时使用较为合适。

4、让其子类实现工厂接口,返回一个抽象的产品。

5、比如航空公司需要一架飞机,可以直接从工厂提货,而不用去管这架飞机怎么做出来的,以及这个飞机里面具体实现。

二、单例模式

1、这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

2、单例类只能有一个实例,必须自己创建自己的唯一实例,必须给所有其它对象提供这一实例。

3、保证一个类仅有一个实例,并且提供一个访问它的全局访问点。

4、主要解决一个频繁地创建与销毁的全局使用的类,构造函数是私有的。

5、比如Windows 是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行。

注意:有5-6种实现方式,有的线程安全,有的线程不安全。

三、代理模式

1、一个类代表另一个类的功能,属于结构体模式,创建具有现有对象的对象,以便向外界提供功能接口。

2、为其他对象提供一种代理以控制对这个对象的访问。

3、在面向对象的系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,可以在访问此对象时加上一个对此对象的访问层。

4、关键在于实现与被代理类的组合

5、比如Windows里面的快捷方式。

四、观察者模式

1、当对象间存在一对多关系时,则使用观察者模式。比如,当一个对象被修改时,则会自动通知依赖它的对象。属于行为者模式。

2、定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

3、一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。

4、在抽象类里有一个ArrayList存放观察者们,其实就是发布订阅模式,发布者发布消息,订阅者获取消息,订阅了就能收到消息,没订阅就收不到信息。

5、比如气象站获取天气数据,可以发送数据给多个公告牌用于展示天气数据。

五、抽象工厂模式

    首先介绍下简单工厂模式,不是23种里面的一种,就是一个专门生产某个产品的类,比如就像一个鼠标工厂,专业生产鼠标,给参数0,生产戴尔鼠标,给参数1,生产惠普鼠标。

   工厂模式就是鼠标工厂是个父类,有生产鼠标这个接口,戴尔鼠标工厂,惠普鼠标工厂都继承它,可以分别生产戴尔鼠标,惠普鼠标。生产那种鼠标不再由参数决定,而是创建鼠标工厂时,由戴尔鼠标工厂创建,后面直接调用鼠标工厂.生产鼠标()即可。

   而我们的抽象工厂模式就是不仅生产鼠标,同时生产键盘,也就是外设厂商是个父类,有生产鼠标,生产键盘两个接口。戴尔工厂,惠普工厂继承它,可以分别生产戴尔鼠标+戴尔键盘,和惠普鼠标+惠普键盘。

   假设如果要增加一个工厂,增加雷蛇工厂,则需要继承外设厂商,之后创建雷蛇鼠标,继承鼠标类,雷蛇键盘,继承键盘类。

   如果后面要增加耳机这个产品,则首先需要增加耳机这个父类,再加上雷神,戴尔和惠普这三个子类,之后在外设厂商这个父类中,增加生产耳机的接口,最后在雷神,戴尔和惠普这三个类中,分别实现生产雷蛇耳机,戴尔耳机和惠普耳机的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值