------- android培训、java培训、期待与您交流!
----------
Java中有23种设计模式
按照目的来分,设计模式可以分为创建型模式、结构型模式和行为型模式。
创建型模式用来处理对象的创建过程;结构型模式用来处理类或者对象的组合;行为型模式用来对类或对象怎样交互和怎样分配职责进行描述。
创建型模式用来处理对象的创建过程,主要包含以下5种设计模式:
工厂方法模式(Factory Method Pattern)
抽象工厂模式(Abstract Factory Pattern)
建造者模式(Builder Pattern)
原型模式(Prototype Pattern)
单例模式(Singleton Pattern)
结构型模式用来处理类或者对象的组合,主要包含以下7种设计模式:
适配器模式(Adapter Pattern)
桥接模式(Bridge Pattern)
组合模式(Composite Pattern)
装饰者模式(Decorator Pattern)
外观模式(Facade Pattern)
享元模式(Flyweight Pattern)
代理模式(Proxy Pattern)
行为型模式用来对类或对象怎样交互和怎样分配职责进行描述,主要包含以下11种设计模式:
责任链模式(Chain of Responsibility Pattern)
命令模式(Command Pattern)
解释器模式(Interpreter Pattern)
迭代器模式(Iterator Pattern)
中介者模式(Mediator Pattern)
备忘录模式(Memento Pattern)
观察者模式(Observer Pattern)
状态模式(State Pattern)
策略模式(Strategy Pattern)
模板方法模式(Template Method Pattern)
访问者模式(Visitor Pattern)
在学习中主要学习了两种设计模式:模板方法设计模式 和 享元设计模式 单例设计模式
享元设计模式(Flyweight):
有很多个小的对象,它们有很多的属性相同,把它们变成一个对象,哪些不同的属性,把它们变成方法的参数,这些不同的属性成为外蕴状态(External State)
那些相同的属性成为内蕴状态(Internal State)
概念:也就是说在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象。比如说一个文本系统,每个字母定一个对象,那么大小写字母一共就是52个,那么就要定义52个对象。如果有一个1M的文本,那么字母是何其的多,如果每个字母都定义一个对象那么内存早就爆了。那么如果要是每个字母都共享一个对象,那么就大大节约了资源。
Flyweight模式是一个提高程序效率和性能的模式,会大大加快程序的运行速度.应用场合很多。
享元设计模式优点:减少对象数量,节省内存空间
享元设计模式缺点:维护共享对象,需要额外的开销(用一个线程来维护垃圾回收)
模板方法设计模式:
解决的问题:当功能内部一部分实现时确定,一部分实现是不确定的。这时可以把不确定的部分暴露出去,让子类去实现。
abstract class GetTime{
public final void getTime(){//此功能如果不需要复写,可加final限定
long start = System.currentTimeMillis();
long end = System.currentTimeMillis();
System.out.println("毫秒是:"+(end-start));
}
public abstract void code(); //抽象不确定的功能,让子类复写实现
}
class SubDemo extends GetTime{
public void code(){//子类复写功能方法
for(int y=0; y<1000; y++){
System.out.println("y");
}
}
}
什么是模版方法呢?
在定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分在使用不确定的部分,那么这时就将不确定的部分暴露出去,由该类的子类去完成。
单例设计模式:
设计模式:解决某一类问题最有效的方法
Java中有23中设计模式
解决的问题:保证一个类在内存中的对象唯一性。
比如:多程序读取一个配置文件时,建议配置文件封装成对象。会方便操作其中数据,又要保证多个程序读到的是同一个配置文件对象,就需要该配置文件对象在内存中是唯一的。
Runtime()方法就是单例设计模式进行设计的。
如何保证对象唯一性呢?
思想:
1,不让其他程序创建该类对象。
2,在本类中创建一个本类对象。
3,对外提供方法,让其他程序获取这个对象。
步骤:
1,因为创建对象都需要构造函数初始化,只要将本类中的构造函数私有化,其他程序就无法再创建该类对象;
2,就在类中创建一个本类的对象;
3,定义一个方法,返回该对象,让其他程序可以通过方法就得到本类对象。(作用:可控)
代码体现:
1,私有化构造函数;
2,创建私有并静态的本类对象;
3,定义公有并静态的方法,返回该对象。
---------------------------------------------
//饿汉式
class Single{
private Single(){} //私有化构造函数。
private static Single s = new Single(); //创建私有并静态的本类对象。
public static Single getInstance(){ //定义公有并静态的方法,返回该对象。
return s;
}
}
---------------------------------------------
//懒汉式:延迟加载方式。
class Single2{
private Single2(){}
private static Single2 s = null;
public static Single2 getInstance(){
if(s==null)
s = new Single2();
return s;
}
}
对于事物该怎么描述,还怎么描述
当需要将该事物的对象保证在内存中唯一时,就将以上的单例设计模式的代码实现的三步加上即可
主函数中怎么调用加入单例设计模式的类?
Student ss=Student.getIntance();//调用单例设计模式类对外提供的公共方法
饿汉式:是Single类一进入对象,就已经创建好了对象了
懒汉式:Single类进入内存,对象还没有存在,只有调用了getInstance方法时,才建立对象
------- android培训、java培训、期待与您交流!
----------
版权声明:本文为博主原创文章,未经博主允许不得转载。