#####单例设计模式#####
单例设计模式的一般定义:一个类中只允许有一个实例。
实现思路:让类的构造方法私有化,同时提供一个静态方法去实例化这个类。
代码 :
static class SingleTon {
private static SingleTon instance;
private SingleTon(){};
public static SingleTon newInstance() {
if(instance==null) {
synchronized (SingleTon.class) {
if(instance==null) {
ins和tance=new SingleTon();
}
}
}
return instance;
}
这是一个较为标准的单例模式,为了安全我给他加了锁,然而这样写并不是最好的写法。单例模式有两种写法,懒汉写法和饿汉写法。
懒汉式:在静态方法中初始化。时间换空间。(不推荐,时间很重要)
饿汉式:在声明对象就初始化。空间换时间。(推荐,空间不是问题)
所以,在实际开发中用的更多的是饿汉写法,可以对这个类加锁,在变量声明的时候就初始化。具体如何实现这里我就不介绍了,可以自己去实现。
#####简单工厂设计模式#####
简单工厂设计模式的一般定义:简单工厂又叫静态工厂,由一个工厂对象决定创建哪一个产品对象。
实现思路:写一个类,让他制造出我们想要的对象。
代码:
public class 学生工厂 {
public static 学生 getStudent(int type) {
switch (type) {
case 学生类型.学神:
return new 学神();
case 学生类型.学霸:
return new 学霸();
case 学生类型.学弱:
return new 学弱();
case 学生类型.学渣:
return new 学渣();
default:
break;
}
return null;
}
}
通过这个工厂,我们可以很方便的生产出我们想要的对象。这里我用伪代码表示,为了更加形象,实际中这样的写法是绝对不允许的!
#####适配器设计模式#####
适配器模式的一般定义:某类继承这个适配器,从而实现我们需要实现的方法。
实现思路:通过写一个适配器类,里面写了所有的抽象方法,但是这些方法是空的,并且适配器类要定义成抽象的,如果适配器类可以自己实现就没有意义了。适配器的作用,继承适配器,重新需要重新的方法就可以了,简化操作。
代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
public class Adapter { public static void main(String[] args) { 阿乐 a= new 阿乐(); a.啪啪啪(); } interface 谈恋爱 { void 吃饭(); void 看电影(); void 逛街(); void 啪啪啪(); } abstract class 恋爱中的妹子 implements 谈恋爱{ @Override public void 吃饭() { // TODO Auto-generated method stub } @Override public void 看电影() { // TODO Auto-generated method stub } @Override public void 逛街() { // TODO Auto-generated method stub } @Override public void 啪啪啪() { // TODO Auto-generated method stub } } class 阿乐 extends 恋爱中的妹子{ public void 啪啪啪() { // TODO Auto-generated method stub System. out .println( "阿乐:亚美爹,好害羞" ); } } } |
这里我写了一个接口,接口中定义了几个方法,当某类实现这个接口的时候就需要实现这些方法。用时适配器不允许自己实现这些方法,需要交给他的子类去继承,让子类选择需要实现什么代码,android中的Adapter就是用了适配器模式。
#####模板设计模式#####
模板设计模式的一般定义:定义一个算法骨架将具体实现交给子类去实现。
实现方法:在类中定义一个抽象方法,距离实现交由子类去实现
代码:
public class A {
public final void run {
........
void howRun();
........
}
public abstract void howRun();
}
public class B extends A {
public void howRun () {
..........
}
}