java有23中设计模式,Android中也用到了很多的设计模式,本篇就来介绍Android中常用的几种设计模式

一、普通工厂设计模式

普通工厂设计模式,就是创建一个工厂类负责创建对象 ,用户根据需求来从工厂类中获取自己想要的产品。这里涉及到的三个

词分别是:工厂 、产品和用户;这里要说明的是产品是有共同特征的,把共同特征提取出来生成一个接口,所有的产品都去实现这个接口

然后工厂类负责创建这些产品,用户需要什么产品去工厂类里获取;

代码实现如下:

产品共同特征接口

/** * 产品共同特征接口 *  * @author jiaocg *  */public interface MyProduct {    // 有什么共同特征都可以在这里定义    public void createProduct(String product);}

苹果类

1 public class Apple implements MyProduct {2 3     @Override4     public void createProduct(String product) {5         System.out.println("我是苹果");6     }7 8 }

梨类

1 public class Pear implements MyProduct {2 3     @Override4     public void createProduct(String product) {5         System.out.println("我是梨");6     }7 }

工厂类

 1 /** 2  * 工厂类 3  *  4  * @author jiaocg 5  *  6  */ 7 public class ProductFactory { 8  9     public MyProduct getProduct(String puduct) {10         if ("苹果".equals(puduct)) {11             return new Apple();// 要苹果就返回苹果12         }13         return new Pear();// 要梨就返回梨14     }15 }

使用工厂类

1 ProductFactory productFactory = new ProductFactory();2 // 我想要苹果3 MyProduct apple = productFactory.getProduct("苹果");4 // 我想要梨5 MyProduct pear = productFactory.getProduct("梨");

二、工厂方法设计模式

工厂方法设计模式是对普通工厂设计模式的拓展,普通工厂设计模式的缺点是,如果有新的产品出现,我们就要修改工厂类,去添加新的产品,

这样破坏了程序封闭性原则,而工厂方法设计模式则解决了这个问题。就是把工厂也独立出来,如上例说到的工厂类既可以创建苹果又可以创建梨

而工厂方法就是一个工厂类只负责创建一个产品(或多个已知产品),因此就生成了单独的工厂,如苹果工厂只生成苹果,梨工厂只生产梨,你添加了新的产品,我就创建新

的工厂类;由于工厂被独立出来,又拥有共同的特性,所以要提取出来一个接口,所有的工厂都去实现这个接口;这就是工厂方法设计模式;

代码示例如下:

苹果和梨对象还是上面的对象

我们首先提取工厂类接口

 1 /** 2  * 工厂类接口 3  *  4  * @author jiaocg 5  *  6  */ 7 public interface MyFactory { 8  9     public MyProduct createProduct();10 }

苹果工厂

 1 /** 2  * 苹果工厂 3  *  4  * @author jiaocg 5  *  6  */ 7 public class AppleFactory implements MyFactory { 8  9     @Override10     public MyProduct createProduct() {11         return new Apple();12     }

梨工厂

 1 /** 2  * 梨工厂 3  *  4  * @author jiaocg 5  *  6  */ 7 public class PearFactory implements MyFactory { 8  9     @Override10     public MyProduct createProduct() {11         return new Pear();12     }

使用工厂创建对象

1 AppleFactory appleFactory=new AppleFactory();2 // 我想要苹果3 MyProduct apple = appleFactory.createProduct();4         5 PearFactory pearFactory=new PearFactory();6 // 我想要梨7 MyProduct pear = pearFactory.createProduct();

以上就是简单的工厂方法设计模式,如果有新的产品出现,我们只需要去创建一个新的工厂类即可;

三、抽象工厂设计模式

有时候当产品种类很多的时候,我们只知道我们要这种产品,但是我们不确定要这种产品的哪一种。比如我们想要苹果

但是苹果有很多种类比如我们分为红苹果和青苹果,有红梨也有青梨,这时我们就可以根据产品的特点划分出产品的种类,

根据产品的种类来定义不同的工厂,我们把工厂共有的特性提取出一个抽象的工厂类,所有的工厂类都继承这个抽象的工厂类

然后来生产不同种类的产品;

代码示例如下:

首先是产品 提取出来一个抽象的产品类

 1 /** 2  * 抽象苹果类 3  *  4  * @author jiaocg 5  *  6  */ 7 public abstract class Apples { 8  9     public abstract void createApple();10 11 }

红苹果

 1 /** 2  * 抽象苹果的子类 红苹果 3  *  4  * @author jiaocg 5  *  6  */ 7 public class RedApple extends Apples { 8  9     @Override10     public void createApple() {11         System.out.println("红苹果");12     }13 }

青苹果

 1 /** 2  * 抽象苹果的子类 青苹果 3  *  4  * @author jiaocg 5  *  6  */ 7 public class BlueApple extends Apples { 8  9     @Override10     public void createApple() {11         System.out.println("青苹果");12     }13 14 }

第二种产品

 1 /** 2  * 抽象梨 3  *  4  * @author jiaocg 5  *  6  */ 7 public abstract class Pears { 8  9     public abstract void createPear();10 }

红梨

 1 /** 2  * 抽象梨的子类 红梨 3  *  4  * @author jiaocg 5  *  6  */ 7 public class RedPear extends Pears { 8  9     @Override10     public void createPear() {11         System.out.println("红梨");12     }13 14 }

青梨

 1 /** 2  * 抽象梨的子类 青梨 3  *  4  * @author jiaocg 5  *  6  */ 7 public class BluePear extends Pears { 8  9     @Override10     public void createPear() {11         System.out.println("青梨");12     }13 14 }

然后我们提取出来一个抽象工厂

 1 /** 2  * 抽象工厂类 3  *  4  * @author jiaocg 5  *  6  */ 7 public abstract class FruitFactory { 8  9     public abstract Apples createApples();10 11     public abstract Pears createPears();12 }

红色种类工厂

 1 /** 2  * 红色种类工厂 3  *  4  * @author jiaocg 5  *  6  */ 7 public class RedFactory extends FruitFactory { 8  9     @Override10     public Apples createApples() {11         // 返回红苹果12         return new RedApple();13     }14 15     @Override16     public Pears createPears() {17         // 返回红梨18         return new RedPear();19     }20 21 }

青色种类工厂

 1 /** 2  * 青色种类生产工厂 3  *  4  * @author jiaocg 5  *  6  */ 7 public class BlueFactory extends FruitFactory { 8  9     @Override10     public Apples createApples() {11         // 返回青苹果12         return new BlueApple();13     }14 15     @Override16     public Pears createPears() {17         // 返回青梨18         return new BluePear();19     }20 21 }

代码示例使用

1 // 从红色种类工厂获取红色种类的水果2 RedFactory redFactory = new RedFactory();3 RedApple redApple = (RedApple) redFactory.createApples();4 RedPear redPear = (RedPear) redFactory.createPears();5 6 // 从青色种类工厂获取青色种类的水果7 BlueFactory blueFactory = new BlueFactory();8 BlueApple blueApple = (BlueApple) blueFactory.createApples();9 BluePear bluePear = (BluePear) blueFactory.createPears();

这样我们就可以对产品进行分类,并创建对应的工厂,我们不知道要什么产品不重要,我们所有种类的工厂

都有,你想要什么种类的产品就创建什么样的工厂,我都能给你。

抽象工厂设计模式的关键在于 抽象产品和抽象工厂类,把所有的产品和工厂进行对应的分类才是关键。

更多相关文章

  1. 关于Unity发布苹果并真机测试的设置与连接
  2. 系统更新率:iOS 9完爆Android阵营!
  3. 上海靠谱社交公司职位:大前端负责人(对标阿里P9)/iOS架构师/Androi
  4. 【设计模式与Android】抽象工厂模式——嵌合体克隆工厂
  5. 看google是怎样在Android(安卓)Market上做出攻防兼备的算法《转
  6. 尼尔森:Android美国市场份额39%,苹果则是最大制造商
  7. WIMM Labs 1.4 英寸可佩戴 Android(安卓)平台 [组图+视频]
  8. Android中设计模式无处不在之简单工厂模式和代理模式
  9. Android应用开发团体赛比赛说明

随机推荐

  1. Android ListView在TalkBack下有些项无法
  2. 探讨相对布局的重要特性和属性
  3. Ubuntu 下配置使用Android adb
  4. Android点击其他地方隐藏键盘
  5. Android自定义相机,切换前后摄像头,照相
  6. /system/bin/service分析与使用
  7. Android(安卓)TabHost的使用(一)
  8. Android(安卓)SDK 之uiautomatorviewer工
  9. android 中的 Bitmap
  10. android 调试方法