设计模式随记

①简单工厂模式:(Factory)工厂模式在于用一个工厂(类)来创造产品也就是实例化的过程是简单工厂模式。

②接口:什么是接口,接口就是一项功能。比如大雁会飞,那么fly就是大雁这个类可以实现的接口

 

策略模式:(Strategy)定义了算法家族,分别封装起来,让它们之间可以相互替换,这个模式让算法的变化不会影响到使用算法的客户。

具体实现

//抽象算法类

Abstract class Strategy{

       //公共算法方法

       Public  abstract void  AlgorithmInterface();

}

策略类族

//具体算法A

Class CooncreteStrategyA  extends  Strategy{

       Public  void AlgorithmInterface(){

              System.out.println(“策略A”);

}//具体算法实现策略A

}

 

//具体算法B

Class CooncreteStrategyB  extends  Strategy{

       Public  void AlgorithmInterface(){

              System.out.println(“策略B”);

}//具体算法实现策略B

}

 

//具体算法C

Class CooncreteStrategyC  extends  Strategy{

       Public  void AlgorithmInterface(){

              System.out.println(“策略C”);

}//具体算法实现策略C

}

Context,用一个ConcreteStrategy来配置,维护对一个Strategy的引用

Class Context{

       Strategystrategy;

       PublicContext(Strategy strategy)

       {

              This.strategy= strategy;

       }

       Publicvoid ContextInterface(){//上下文接口

              Strategy.AlgorithmInterface();

       }

}

客户端代码:

       Context context;

              Context = new Context(newConcreteStrategyA());调用策略A

              Context.ContextInterface();

Context = new Context(newConcreteStrategyB());调用策略B

              Context.ContextInterface();

 

 

设计模式的几个基本原则

 

单一职责原则SRP:就一个类而言,应该仅有一个引起他变化的原因,其实就是类似mvc模式,把各自职责分开。

 

开放封闭原则The open-Closed Principle OCP:软件实体可以拓展,但是不可以修改,对于拓展是开放的,对于修改是封闭的。对程序的改动是增加新代码,而不是改动现有代码

 

依赖倒转原则:强内聚,松耦合;抽象不应该依赖细节,细节应该依赖抽象。针对接口编程,不要针对实现编程。高层模块 不应该依赖低层模块,两个都应该依赖抽象。

 

里氏代换原则:子类型必须能够替换掉他们的父类型。(LSP);子类拥有父类所有非private属性。利用这个原则面向抽象编程而非面向细节编程,程序的所有依赖关系都终止于接口,就是面向对象的设计。

 

装饰模式Decorator:装饰模式是利用setComponent来对对象进行包装的,这样每个对象的实现与如何使用对象分开了,每个装饰对象只关心自己的功能,而不必关心如何被添加到对象链中。

       优点在于把类中的装饰功能从类中搬移去除,可以简化原有的类。

代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。Subject提供了RealSubject和Proxy的公用接口,RealSubject是proxy所代表的真实实体

工厂方法模式FM:定义一个用于创建对象的接口,让子类决定实例化哪一个类,使得类的实例化延迟到其子类。

原型模式Prototype:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。浅复制,深复制。

 

模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法是的子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。模板方法通过把不变的行为搬移到超类,去除子类中重复代码。

迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应当直接发生相互作用。如果其中一个类需要调用另一个类的某一个方法,可以通过第三者转发这个调用(LOD)最少知识原则。

外观模式(Façade):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

建造者模式Builder:将一个复杂的构建对象与它的表示分离,使得同样的构建过程可以创建不同的表示。生成器模式。先抽象造人的类,把过程稳定住。然后实现具体建造过程的类。然后需要指挥者Director来控制建造过程的类。类图分为Director,Builder,ConcreteBuilder和具体Product。建造者模式用于创建复杂对象,这些对象内部构建间的建造顺序是稳定的,但构建常面临复杂的变化。

观察者模式(发布订阅模式Publish/Subscribe):定义了一种一对多的关系,让多个观察者对象同时监听某个主题对象,这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

抽象工厂模式Abstract Factory:提供一个创建一些列相关或者相互依赖对象的接口,无需指定他们具体的类。抽象工厂接口里面包含所有产品创建的抽象方法。具体的工厂实现特定的产品对象。

 

状态模式State:当一个对象内在状态改变时允许改变其行为,这个对象看起来像是改变了其类,主要是为了解决一个对象状态转换条件表达式过于复杂的情况,把状态判断逻辑转移到表示不同状态的一系列类中,把复杂的判断逻辑简化。当一个对象的行为取决于他的状态,而且它必须在运行时刻根据状态改变它的行为时,就可以考虑状态模式。

适配器模式Adapter:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。系统数据和行为都正确,但接口不符,使用适配器是控制范围之外的一个原有对象与某个接口匹配。分为类适配器和对象适配器。

备忘录模式Memento:在不破坏封装的前提下,补货一个对象的内部状态,并在对象之外保存这个状态,这样以后就可以将该对象恢复到以前保存的状态。

组合模式Composite:将对象组合成树形结构以表示‘部分—整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。

迭代器模式Iterator:提供一种方法访问一个聚合对象中各个元素,又不暴露该对象内部表示

单例模式Singletoe:通过一个全局变量使得对象被访问,但是防止你实例化多个对象最好的办法是:让类自身负责保存它的唯一实例,这个类可以保证没有其他实例被创建,并且提供一个访问该实例的方法

Class  Singleton{

       Private static Singleton instance;

       Private Singleton(){}

       Public static Singleton  GetInstance(){

       If(instance == null){

              Instance = new Singleton();

}

Return instance;

}

}

合成聚合复用原则CARP:尽量使用合成聚合,尽量不要使用类继承。聚合表示一种“弱”拥有关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分;合成则是一种“强”拥有关系,体现了严格的部分与整体的关系,部分与整体的生命周期一样。

桥接模式Bridge:将抽象部分与它的实现部分分离,使它们都可以独立变化。

命令模式Command:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤销的操作。

责任链模式Chainof Responsibility:使得多个对象都有机会处理请求,从而避免请求发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有个对象处理它为止。

中介者模式Mediator:使用一个中介对象来封装一系列的对象交互,中介者是各个对象不需要显示的相互引用,使其耦合松散且可以独立的改变他们之间的交互。

享元模式Flyweight:使用共享技术有效支持大量细粒度对象,享元模式可以避免大量的非常相似的开销。享元内部且不会随着环境改变而改变的部分称为享元模式的内部状态。程序设计需要大量生成细粒度的类实例表示数据,如果能发现这些实例除了参数外基本都是相同的,有时就能大幅度减少需要实例化的类的数量。如果能把参数移到类实例外面,在方法调用时将他们传递进来,就可以通过共享大幅度的减少单个实例的数目。

解释器模式Interpreter:解释器模式是指给定一个语言,定义他的一种表示,实现一个解释器,解释器解释语言中的句子。

访问者模式Visitor:表示一个作用于某对象结构中各元素的操作,他可以使你在不改变各元素类的前提下定义作用于这些元素的新操作。其适用于数据结构相对稳定的系统,把数据结构和结构上的操作之间耦合解开,使得操作集合可以相对自由的演化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值