Android 单单例例模模式式 Singleton 简简单单实实例例设设计计模模式式解解析析
单单例例模模式式 Singleton 简简单单实实例例设设计计模模式式解解析析
前言
今天我来全面总结一下A ndroid开发中最常用的设计模式 - 单例模式。
关 设计模式的介绍,可以看下我之前写的:1分钟全面了解“设计模式”
目录
1. 引引入入
1.1 解决的是什么问题
之前说过,设计模式 = 某类特定问题的解决方案,那么单单例例模模式式是解决什么问题的解决方案呢?
含义:单例 =一个实例;
解决的问题:降低对象之间的耦合度
解决方法:单例模式,即实现一个类只有一个实例化对象,并提供一个全局访问点
1.2 实例引入
接下来我用一个实例来对单例模式进行引入
背景:小成有一个塑料生产厂,但里面只有一个仓库。
目的:想用代码来实现仓库的管理
现有做法: 建立仓库类和工人类
其中,仓库类里的quantity =商品数量;工人类里有搬运方法MoveIn(int i)和MoveOut(int i)。
出现的问题:通过测试发现,每次工人搬运操作都会新建一个仓库,就是货物都不是放在同一仓库,这是怎么回事呢? (看下面
代码)
package scut.designmodel.SingletonPattern;
//仓库类
class StoreHouse {
private int quantity = 100;
public void set uantity(int quantity) {
this.quantity = quantity;
}
public int get uantity() {
return quantity;
}
}
//搬货工人类
class Carrier{
public StoreHouse mStoreHouse;
public Carrier(StoreHouse storeHouse){
mStoreHouse = storeHouse;
}
//搬货进仓库
public void MoveIn(int i){
mStoreHouse.set uantity(mStoreHouse.get uantity()+i);
}
//搬货出仓库
public void MoveOut(int i){
mStoreHouse.set uantity(mStoreHouse.get uantity()-i);
}
}
//工人搬运测试
public class SinglePattern {
public static void main(String[] args){
StoreHouse mStoreHouse1 = new StoreHouse();
StoreHouse mStoreHouse2 = new StoreHouse();
Carrier Carrier1 = new Carrier(mStoreHouse1);
Carrier Carrier2 = new Carrier(mStoreHouse2);
System.out.println("两个是不是同一个?");
if(mStoreHouse1.equals(mStoreHouse2)){//这里用equals而不是用 == 符号,因为 == 符号只是
比较两个对象的地址
System.out.println("是同一个");
}else {
System.out.println("不是同一个");
}
//搬运工搬完货物之后出来汇报仓库商品数量
Carrier1.MoveIn(30);
System.out.println("仓库商品余量:"+Carrier1.mStoreHouse.get uantity());
Carrier2.MoveOut(50);
System.out.println("仓库商品余量:"+Carrier2.mStoreHouse.get uantity());
}
}
结结果果::
两个是不是同一个?
不是同一