设计模式之个人总结

设计模式

1 定义

设计模式是对软件设计中普遍存在的各种问题,所提出的 解决方案。

换句话说,设计模式是一套被反复使用、多数人知晓的、经过分类的、代码设计的 经验的总结。使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码可靠性。


2 基本原则

1.对扩展开放,对修改封闭,在需要扩展时不能去修改源码

2.只有当子类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,而且子类也能够在基类的基础上增加新的行为

3.针对接口编程,模块间减少相互依赖

4.使用多个隔离的接口,降低耦合性

5.类的职责要单一,不能将太多的职责放在一个类中

6.系统功能模块尽可能相对独立

7.尽量多使用 组合/聚合 的方式,尽量少使用甚至不使用继承关系

3 基本设计模式

3.1 工厂模式

是一个用来创建其他对象的对象。工厂模式根据不同的参数来实现不同的分配方案和创建对象。最常用的方法为 静态工厂方法模式

// 多个工厂方法
public class HumanFactory{
    public static Male createMale() {
        return new Male();
    }
    public static Female createFemale() {
        return new Female();
    }
}

// 工厂测试类
public class FactoryTest {
    public static void main(String[] args){
        Human male = HumanFactory.createMale();
        male.eat();
        male.sleep();
        male.beat();
    }
}

3.2 抽象工厂模式

抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。抽象工厂是一个父类工厂,可以创建其它工厂类。所以我们也叫它 “工厂的工厂”。

工厂方法模式、抽象工厂模式最大的区别在于:

工厂方法模式:针对的是 一个产品等级结构; 如 食物结构(包含苹果、香蕉….)、 餐具结构(刀、筷子…..)等

抽象工厂模式:针对 多个产品等级结构。

简单说来,就是一层套一层的关系。

3.3 适配器模式

适配器模式(Adapter Pattern)就是用来适配的。当你想使用一个已有的类,但是这个类的接口跟你的又不一样,不能拿来直接用,这个时候你就需要一个适配器来帮你了。主要作用就是在旧的接口、新的接口之间完成适配。

基本要求:
1.适配器必须实现原有的旧的接口
2.适配器对象中持有对新接口的引用,当调用旧接口时,将这个调用委托给实现新接口的对象来处理,也就是在适配器对象中组合一个新接口。

//适配器
public class PluginAdapter implements CnPluginInterface {
     private EnPluginInterface enPlugin;

     public PluginAdapter(EnPluginInterface enPlugin) {
         this.enPlugin = enPlugin;
 }

 // 这是重点,适配器实现了英标的插头,然后重载国标的充电方法为英标的方法
     @Override
     public void chargeWith2Pins() {
        enPlugin.chargeWith3Pins();
     }
}

如代码所式,适配器在实现国标接口的情况下,对其的方法进行了重载,从而使得在调用旧接口时用的是英式接口的方法。

3.4 装饰者模式

装饰者模式(Decorator Pattern,有的也用 Wrapper Pattern)就是动态地把职责附加到已有对象上去,实现功能扩展。这种特性,使得装饰者模式提供了比继承更具有弹性的解决方案。

Java IO 类中一个经典的装饰者模式应用, BufferedReader 装饰了 InputStreamReader.

BufferedReader input = new BufferedReader(new InputStreamReader(System.in));

InputStreamReader(InputStream in) - InputSteamReader 读取 bytes 字节内容,然后转换成 characters 流 输出。

BufferedReader(Reader in) - 从 characters 流 中读取内容并缓存。

3.5 观察者模式

观察者模式(Observer Pattern)就是一种 “发布者-订阅者” 的模式。有时也被称为“源-监听者”模式等。在这种模式中,由一个目标对象来管理所有依赖与它的观察者对象,并且当这个目标对象自身发生改变时,会主动向它的观察者们发出通知。

比如你最近在追一个美剧《生活大爆炸》,假设著名在线视频网站某狐买下独家版权,在线更新与播放。于是你天天等啊等啊,等它的更新通知一来,你就去看那些最新的视频。 再比如说,当你有一个按键,你肯定要给这个按键添加监听事件(listener)来完成指定动作吧,这就是一种应用。

3.6 单例模式

就是被单例的对象只能有一个实例存在。单例模式的实现方式是,一个类能返回对象的一个引用(永远是同一个)和一个获得该唯一实例的方法(必须是静态方法)。通过单例模式,我们可以保证系统中只有一个实例,从而在某些特定的场合下达到节约或者控制系统资源的目的。

由于其中涉及许多的线程、同步等问题,导致在使用其他方法时不可避免的会造成多线程运行、效率低下等问题,所以

枚举是实现其的最好方法

// 枚举
public enum Wife {
    INSTANCE;

    // 自定义的其他任意方法
    public void whateverMethod() { }
}

3.7 其他模式的整体描述图

设计模式


4 感想体会

总的来说,这也是个大坑,其中涉及的内容多种多样,也是其他方面学习的必经之路。设计模式更多提供的是一个理论和思想,它教会你如何运用这些模式来设计程序,使之更高效、合理。在具体运用时,不应为了用某种模式而去使用它,而应该选择最适合程序的模式来使用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值