美文网首页
android设计模式

android设计模式

作者: Shinemax | 来源:发表于2018-02-12 15:27 被阅读0次

一.单例模式
使一个类的构造器私有化,在调用这个类的构造器的时候只会产生一个构造器,如果已经有这个构造器生成,只会返回之前已经有过得对象。

二.装饰模式
装饰模式必定有一个父抽象类或者接口,而这个父抽象类或者接口的实现类就是我们要负责装饰的对象,怎么装饰呢,我们可以通过继承这个父抽象类或借口产生一个装饰类(decorator)然后继承他的子类将会去装饰我们要装饰的对象。

三.策略模式
策略模式就是将好几个实现主接口的类,通过把类的对象放入“锦囊”类构造器里调用“锦囊”内的方法来实现调用自己的方法,“计谋”都实现同一个接口,这些类都重写接口中的方法,就是所谓的“计谋”,最后用一个“锦囊”类来包裹这些“计谋”类,通过在构造器中加入“计谋”类的对象,多态调用其实现接口类的方法,最后可以通过这个“锦囊”来直接获取“计谋”。

四.代理模式
代理模式就是把相同方法,动作的类实现一个相同的接口,而其中有一个类是Agent类,这个类会有一个私有的接口类型引用,他有两个构造方法,一个是空参的,空参的构造器中,接口的引用指向被代理的对象,若是有参构造器中,接口的引用指向参数的对象,而Agent里面重写的方法即是调用接口引用对象的 方法。

五.门面模式
门面模式就是创立一个能帮助使用者更方便进行操作的类,类里面有着实现接口类的对象(多态),然后通过一个方法,来封装这些实现类中方法和顺序,最后可以直接通过这个门面类的对象调用所有的方法,和顺序。好处就在于,你如果要对其中的某一个点进行检查,就比如说,彭三鞭可能没死,我们需要检查一下,他如果不死,会给佛爷取药造成麻烦,所以我们可以直接在外面添加一个PenSanBian的类,然后在门面中new出对象,在方法中调用pengSanBianOver()的方法,很方便。

六.模板方法模式
相同的子类都要重写父类相同的方法,而且调用的顺序如果也相同,我们就可以用模板模式,直接在父类中定义一个实现方法,这个方法中有其他父类中的方法,并且制定了顺序,子类不必重写这个方法,只需重写其他方法,如果子类有需求变动,在需要父类定义一个抽象方法判断是否使用变动的那个方法,则子类在继承的时候要多重写一个方法,并且得再写一个获得这个boolean值得方法,通过在场景类直接使用子类对象,传参,运行。

七.建造者模式(难)
建造者,何为建造者,建造东西的或者那些生产线上的人,都是建造者,他们是通过把固定的"产品"通过一定的"组装",最后生成漂亮的产品,这一系列的动作即为建造。那我们来说说建造器的功能,它能够是繁杂的"产品功能","功能组合顺序","建造"等一系列动作放入导演类中完成(演员-薛之谦),这个导演类是核心,在类里面每一个get方法都能得到一个固定的已经完成的"产品"。那接下来让我们说说这到底是一个怎么样的神奇的类,恩,从头开始说,产品的功能都有一个共同的父抽象类,这个抽象类里有所有产品应该有的公共的方法,这些方法是抽象的,因为子类要去重写,然后还有一个组装这些方法的大方法,这个方法不是抽象的,子类可以直接拿来用,因为有些产品的功能可能会因顾客要求而变动,直接的说就是有些产品方法我用不到,我不想要,或者顺序的变动,那么我们就需要一个集合来处理这些方法,抽象类中还应该有获取集合的方法。然后呢,子类继承父类重写方法,那么集合从哪来?客户的要求从哪过来,谁去响应?在哪组成?问得好!我们需要一个builder的抽象类,用来制造产品,用来得到客户的请求,并且制造产品。builder类里面的方法只有两个,都是抽象方法,一个是获取集合的方法,一个是得到产品的方法。然后我们就可以做每个产品对应的builder了,我们继承builder,重写他的方法,但是我们需要制造产品的这个对象,(比如牙刷builder,我们就需要牙刷的对象),之后只要把获取到的集合放到产品对象的获取集合的方法中,这个产品就得到了这个集合,随后,用get对象返回这个产品对象,在场景类里面run就可以了,那么问题来了,场景类很累啊,你每次都要自己输入集合(就是产品的功能的顺序,次数),那怎么办呢?这个时候我们就要一个导演类,有导演负责集合,是固定的,所以把所有的情况写里面,之后封装起来,直接在场景类里调用导演里面的方法就行,每一个方法返回的都是一个固定的产品。(简单吧,场景类(客户)会轻松很多 升值还会离你远?)

八、桥梁模式
这很桥梁,是的看这个名字你应该就能联想到了,这跟桥有关,那么桥的特效是什么呢,桥有什么作用,古时候的人发现河流阻断了两条路,导致人们无法过这条河,但是机制的先祖想到了用"桥"的办法来沟通两条路,所以能从“一条路走到另一条路”,这句话很关键,那么到底什么是桥梁模式呢,人站着的那条路,即为抽象类,而对面那条路则是实现类,人通过桥梁模式走到了哪条路,好处是什么,人过去了,到成么目标,你可以去往新的地方,在桥梁模式中则是抽象角色的引用实现角色,就是说你想改动父类的一个方法,但是又不想对其子类造成影响,那就把这个方法移出去,通过桥梁搭建起来,子类用的也会是这个方法,前提得是父类构造其中必须有桥梁另一端的类对象,这样就能通过这个桥梁对象得到其本身自带的桥梁方法了。(好抽象。。。),简而言之,就是你要用到的类的父类桥梁另一个类,通过把本来继承父类的方法写到,桥梁类的对应的子类中去就可以通过参数直接得到桥梁子类的对象,和方法。

小知识:
父类可以使用子类的方法吗? 答案是可以的,怎么使用? 有三种方式
1、通过直接在父类构造器中传入子类对象,再调用子类的方法。
2、直接用反射,有反射,哪个方法不能调用?
3、通过子类的引用直接调用其静态方法。
方法很好用,目的也达到了,但是并不能在实践中运用,这在逻辑上就错误了,父类为什么调用子类的方法,子类本来就是继承父类的,为什么要反向调用?你以为你是dogv?但是模板模式却恰好有着这种效果,通过修改子类,也同时动了父类。

六大设计原则

一.单一职责原则
降低类的复杂度,一个类只负责一个职责,这样的话逻辑会很简单,提高类的可读性,提高系统的可维护性,

二.里氏替换原则
所有引用基类的地方必须能够透明的使用它的子类对象。子类可以扩展父类功能,但不能变更父类原有的功能,就是说,不能动父类,当子类重载父类的方法时,其参数范围必须比父类的更大,当重写抽象方法,其返回值要比父类更严格。
三.依赖倒置原则
在高层模块依赖底层模块的时候,若是想变动运算,必须修改高层模块,这个时候就需要一个借口,通过高层模块依赖这个接口,接口即为抽象,细节即为实现抽象类,通过接口降低了高、底层模块之间的耦合性,底层模块必须要有抽象类或借口,变量的声明类型尽量是抽象类或接口,使用继承时遵循里氏替换原则。

相关文章

网友评论

      本文标题:android设计模式

      本文链接:https://www.haomeiwen.com/subject/kbortftx.html