设计模式精简版

 开闭原则(对扩展开放;对修改封闭)

需求是时刻在变化的,开闭原则就是在面对新需求是尽可能的保持代码稳定,核心思想是对可能变化的部分抽象。

开放-封闭原则是面向对象设计的核心所在。遵循这个原则可以带来面向对象技术所生成的巨大好处,也就是可维护、可扩展、可服用、灵活性好。开发人员应该仅对程序中呈现出频繁变化的那部分抽象,然而,对于应用程序中的每个部分都刻意地进行抽象同样不是一个好主意。拒绝不成熟的抽象和抽象本身一样重要。切记。

里氏代换原则 

 一个软件的实体如果使用的是一个父类,那么一定使用其子类,而且它察觉不出父类对象和子类对象的区别。也就是说,在软件里面,把父类替换成子类的话,程序的行为没有变化。

 依赖倒转原则

  1. 高层模块不应依赖底层模块。两个都应该依赖抽象
  2. 抽象不应该依赖细节。易接应该依赖抽象 

工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)

1.简单工厂模式又称静态工厂方法模式。命名上就可以看出这个模式一定很简单。它存
在的目的很简单:定义一个用于创建对象的接口。
public interface Car
{
    public void drive();
}
    //具体产品角色
public class Benz implements Car
{
    public void drive() {
        System.out.println("Driving Benz ");
    }
}
public class Bmw implements Car
{
    public void drive() 
    {
        System.out.println("Driving Bmw ");
    }
}
 

2.工厂方法模式

工厂方法模式克服了简单工厂违背 开放-封闭原则的缺点,又保持了分装对象创建过程的有点。工厂方法模式是简单工厂模式的进一步抽象和推广。

工厂方法模式的缺点:每添加一个生成产品,就要多加一个生产该产品的工厂,增加了额外开发量。

3.抽象工厂模式

单例模式

 饿汉模式:线程安全,构造函数不暴露,提供一个获取接口,单例在代码被运行时创建

public class Singleton { 
    private static Singleton instance = new Singleton(); 
    
    private Singleton(){}

    public static Singleton getInstance() { 
         return instance; 
    } 
}

懒汉模式:多线程不安全,在JAVA中用了synchronized 字段限制规避多线程出现多个单例

public class Singleton { 
    private static Singleton instance = null; 

    private Singleton(){}

    public static synchronized Singleton getInstance() { 
        if (instance==null) 
             instance=new Singleton(); 
        return instance; 
    } 
}

简单写法:

public static final Singleton INSTANCE = new Singleton();

建造模式

        建造模式的定义为:将一个复杂对象的构建与它的表示分离,使得同样的构建
过程可以创建不同的表示。这句话说得很抽象,不好理解,其实它的意思可以理解为:将构
造复杂对象的过程和组成对象的部件解耦。就像攒电脑一样,不管什么品牌的配件,只要兼
容就可以装上;同样,一样的配件,可以有好多组装的方式。这是对降低耦合、提高可复用
性精神的一种贯彻。
        建造模式可以使得产品内部的表象独立变化。在原来的工厂方法模式中,产品内部的表
象是由产品自身来决定的;而在建造模式中则是 外部化 为由建造者来负责。这样定义一个
新的具体建造者角色就可以改变产品的内部表象,符合 开闭原则

原型模式 

原型模式属于对象创建模式, GOF 给它的定义为:用原型实例指定创建对象的种类,
并且通过拷贝这些原型创建新的对象。
适用场景:大部分数据重复,小部分数据更改的情况,复制后再调用接口改部分数据

适配器模式 

将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作

举例:

桥梁模式

桥梁模式的定义为:将抽象部分与它的实现部分分离,使它们都可以独立地变化。
四、使用环境与优势
桥梁模式应该适用于以下环境:
1) 当你的系统中有多个地方要使用到类似的行为,或者是多个类似行为的组合时,可以考
虑使用桥梁模式来提高重用,并减少因为行为的差异而产生的子类。
2) 系统中某个类的行为可能会有几种不同的变化趋势,为了有效的将变化封装,可以考虑
将类的行为抽取出来。
3) 当然上面的情况也可以是这样,行为可能要被不同相似类使用,也可以考虑使用桥梁模
式来实现。
桥梁模式使用了低耦合性的组合代替继承,使得它具备了不少好处:
1) 将可能变化的部分单独封装起来,使得变化产生的影响最小,不用编译不必要的代码。
2) 抽象部分和实现部分可以单独的变动,并且每一部分的扩充都不会破坏桥梁模式搭起来
架子。
3) 对于客户程序来说,你的实现细节是透明的。

组合模式 

组合(Composite)模式的其它翻译名称也很多,比如合成模式、树模式等等。在《设计 式》一书中给出的定义是:将对象以树形结构组织起来,以达成“部分-整体的层次结构,使得客户端对单个对象和组合对象的使用具有一致性。

五、优缺点
从上面的举例中可以看到,组合模式有以下优点:
1) 使客户端调用简单,客户端可以一致的使用组合结构或其中单个对象,用户就不必关心
自己处理的是单个对象还是整个组合结构,这就简化了客户端代码。
2) 更容易在组合体内加入对象部件 . 客户端不必因为加入了新的对象部件而更改代码。这
一点符合开闭原则的要求,对系统的二次开发和功能扩展很有利!
当然组合模式也少不了缺点:组合模式不容易限制组合中的构件。

外观模式 

类1对一些类(类2-类N)实例的封装, 构造函数时创建所有类的实例,当调用类1某个函数时,执行类2-类N的某些函数

装饰模式

 感觉很鸡肋

代理模式 

模板方法模式

 迪米特法则

 如果两个类没有直接通信,那么这两个类就不应当发生直接的相互作用,如果其中一个类需要调用另一个类的某个方法,可通过第三者转发这个调用。

观察者模式

 观察者模式又叫发布-订阅模式。定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个对题对象在状态发生变化时,会通知所有观察者。

状态模式

当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。

实际应用:员工一天的状态分为:早、中、下、晚、休息状态,抽象每一个状态并随着时间变化切换状态。如果有新需求,时间大于20点则强制休息下班,则修改晚上的工作状态即可,到达时间强制切换到休息状态。

备忘录模式

在不破坏封装性的前提下,补货一个对象的内部状态,并在该状态之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

迭代器模式

提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。 

桥接模式

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Little丶Seven

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值