设计模式
设计模式(Design pattern),是一套被反复使用、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、保证代码可靠性、程序的重用性, 稳定性。
1995 年,GoF (Gang of Four ,四人组)合作出版了《设计模式:可复用面向对象软件的基础》一书,共收录了 23 种设计模式。< 大话设计模式>
总体来说设计模式分为三大类:
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。-- > 创建对象
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。-- > 对功能进行增强
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
1.模版方法设计模式
模板方法(Template Method )模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。明确了一部分功能,而另一部分功能不明确。需要延伸到子类中实现
饭店中吃饭: 点菜,吃菜和买单三个步骤。点菜和买单基本上一致的,但是吃菜不同,吃法也不同。明确了一部分功能,而另一部分功能不明确。
public abstract class Hotel {
public void eat ( ) {
System . out. println ( "点菜" ) ;
eatCai ( ) ;
System . out. println ( "买单" ) ;
}
public abstract void eatCai ( ) ;
}
public class QuanJuDe extends Hotel {
@Override
public void eatCai ( ) {
System . out. println ( "薄饼" ) ;
System . out. println ( "放鸭肉" ) ;
System . out. println ( "酱" ) ;
System . out. println ( "葱丝" ) ;
System . out. println ( "黄瓜丝" ) ;
System . out. println ( "卷着吃" ) ;
}
}
public class ZhangLiang extends Hotel {
@Override
public void eatCai ( ) {
System . out. println ( "调麻酱" ) ;
System . out. println ( "放辣椒油" ) ;
System . out. println ( "倒到大碗中吃" ) ;
}
}
public class Test01 {
public static void main ( String [ ] args) {
QuanJuDe quanJuDe = new QuanJuDe ( ) ;
quanJuDe. eat ( ) ;
System . out. println ( "================" ) ;
ZhangLiang zhangLiang = new ZhangLiang ( ) ;
zhangLiang. eat ( ) ;
}
}
2.单例模式
1.目的:单(一个) 例(实例,对象)
让一个类只产生一个对象,供外界使用
2.分类:
a.饿汉式:我好饥渴呀,好饥饿呀,迫不及待要这个对象,所以和对象就需要赶紧new出来
b.懒汉式:我好懒呀,不着急要对象,想啥时候使用,你啥时候new给我
2.1.饿汉式:
饿汉式:我好饥渴呀,好饥饿呀,迫不及待要这个对象,所以和对象就需要赶紧new出来
public class Singleton {
private Singleton ( ) {
}
private static Singleton singleton = new Singleton ( ) ;
public static Singleton getSingleton ( ) {
return singleton;
}
}
public class Test01 {
public static void main ( String [ ] args) {
for ( int i = 0 ; i < 10 ; i++ ) {
Singleton singleton = Singleton . getSingleton ( ) ;
System . out. println ( singleton) ;
}
}
}
2.2.懒汉式:
懒汉式:我好懒呀,不着急要对象,想啥时候使用,你啥时候new给我
public class Singleton1 {
private Singleton1 ( ) {
}
private static Singleton1 singleton1 = null ;
public static Singleton1 getSingleton1 ( ) {
if ( singleton1== null ) {
synchronized ( Singleton1 . class ) {
if ( singleton1 == null ) {
singleton1 = new Singleton1 ( ) ;
}
}
}
return singleton1;
}
}
1.3.小结
构造私有
对象私有, 静态的