Android设计模式

1. 设计模式之抽象工厂模式


在学习抽象工厂模式前要先了解一下工厂模式,而抽象工厂模式主要就是为了弥补工厂模式的缺点的,抽象~遵循了开闭原则

设计原则之开闭原则 (Open Close Principle,缩写OCP)
类、模块、函数等对于拓展是开放的,但是对于修改是封闭的,当软件需要变化时,应该尽量通过拓展的方式来实现变化,而不是通过修改已有的代码来实现。(接口)
附上链接

  • 简单工厂模式中没有抽象,直接创建一一对应就不符合开闭原则
  • 而工厂模式已经引入了抽象,工厂方法模式组成:
    1)抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
    2)具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。
    3)抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。
    4)具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。
    工厂方法模式使用继承自抽象工厂角色的多个子类来代替简单工厂模式中的“上帝类”。正如上面所说,这样便分担了对象承受的压力;而且这样使得结构变得灵活 起来——当有新的产品产生时,只要按照抽象产品角色、抽象工厂角色提供的合同来生成,那么就可以被客户使用,而不必去修改任何已有 的代码。可以看出工厂角色的结构也是符合开闭原则的!
1.  abstract class BMW {  
2.  public BMW(){  

4.  }  
5.  }  
6.  public class BMW320 extends BMW {  
7.  public BMW320() {  
8.  System.out.println("制造-->BMW320");  
9.  }  
10.  }  
11.  public class BMW523 extends BMW{  
12.  public BMW523(){  
13.  System.out.println("制造-->BMW523");  
14.  }  
15.  }  

创建工厂类:

1.  interface FactoryBMW {  
2.  BMW createBMW();  
3.  }  

5.  public class FactoryBMW320 implements FactoryBMW{  

7.  @Override  
8.  public BMW320 createBMW() {  

10.  return new BMW320();  
11.  }  

13.  }  
14.  public class FactoryBMW523 implements FactoryBMW {  
15.  @Override  
16.  public BMW523 createBMW() {  

18.  return new BMW523();  
19.  }  
20.  }
  • 最后是抽象工厂模式,他工厂模式有些相似,但是他的特点:
    抽象工厂模式是工厂方法模式的升级版本,他用来创建 一组相关或者相互依赖的对象
    比如宝马320系列使用空调型号A和发动机型号A,而宝马230系列使用空调型号B和发动机型号B,那么使用抽象工厂模式,在为320系列生产相关配件时,就无需制定配件的型号,它会自动根据车型生产对应的配件型号A。
 //发动机以及型号    
  public interface Engine {    

 }    
 public class EngineA extends Engine{    
  public EngineA(){    
  System.out.println("制造-->EngineA");    
 }    
  }    
  public class EngineBextends Engine{    
  public EngineB(){    
 System.out.println("制造-->EngineB");    
  }    
  }    

 //空调以及型号    
  public interface Aircondition {    

  }    
 public class AirconditionA extends Aircondition{    
  public AirconditionA(){    
  System.out.println("制造-->AirconditionA");    
 }    
  }    
  public class AirconditionB extends Aircondition{    
 public AirconditionB(){    
  System.out.println("制造-->AirconditionB");    
  }    
 }   

创建工厂类:
  //创建工厂的接口    
  public interface AbstractFactory {    
 //制造发动机  
  public Engine createEngine();  
  //制造空调   
  public Aircondition createAircondition();   
 }    

 //为宝马320系列生产配件    
  public class FactoryBMW320 implements AbstractFactory{    

  @Override    
  public Engine createEngine() {      
return new EngineA();    
  }    
 @Override    
  public Aircondition createAircondition() {    
  return new AirconditionA();    
 }    
  }    
  //宝马523系列  
 public class FactoryBMW523 implements AbstractFactory {    

  @Override    
  public Engine createEngine() {      
  return new EngineB();    
  }    
  @Override    
  public Aircondition createAircondition() {    
  return new AirconditionB();    
  }    
  }

参考https://blog.csdn.net/jason0539/article/details/44976775


2.android设计模式之策略模式

策略模式跟上面工厂模式也有相似,都是利用调用方法是传入不同的接口对象

  • 一般的做法是在一个类里写不同的方法,然后根据实际情况用一连串的if-else或switch来选择对应的方法。这种方法多了后,这个类会变得臃肿,难以修改。(类似于简单工厂模式)
  • 所以如果把不同的策略抽象出来,提供一个统一的接口,为每一个策略写一个实现类,这样客户端就能通过调用接口的不同的实现类来动态替换策略。这就是策略模式
//定义一类的策略接口
interface ComputerStrategy{
      int computer(int num);
}

//定义一些不同的类实现接口
public class ComputerA implement ComputerStrategy{
      public int computer(int mun){
        ....
 }
}
public class ComputerB implement ComputerStrategy{
    ....
}

//定义一个方法,引用该接口(可以创一个类在封装一下这个方法)
  public  int  Computer(ComputerStrategy computers){
      computers.computer(..);
}

更好的代码参考:https://blog.csdn.net/qq_25806863/article/details/68623134

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容