总览
其他文章链接
【 Java编程基础_注解与命名规则&数据类型&运算符&修饰符&流程控制】
【Java面向对象编程_方法&类与对象&数组&String类】
【Java面向对象编程_抽象类&接口&包装类&泛型】
本文内容
1,包
2,访问控制权限
3,构造方法私有化
demo_饿汉式
//单例设计模式:在某个类中只允许生成一个实例化对象
//单例设计模式分类:饿汉式(在类准备中就提供一个实例化对象),饱汉式(在第一次需要实例化对象时才提供,之后不提供新的实例化对象)
class Singleton
{
/*饿汉式:
1.由于单例设计所以外部不能随意生成实例化对象而生成实例化对象由类的构造方法实现,所以在类中的构造方法应为“private”的。
2.需要在类准备中提供实例化对象且这个对象是不可被外部随意调用的(private)公用的(static)不可改变的(final)相当于对类中的常量,所以类准备中提供的实例化对象属性为:private static final
3.外部需要实例化对象时,需要类将类准备时产生的实例化对象调用,所以需要一个static方法实现类名直接调用传递实例化对象
*/
private static final Singleton INSTANCE=new Singleton();
private Singleton(){};
public static Singleton getInstance(){
return INSTANCE;
}
public void echo(){
System.out.println("单例设计模式");
}
}
public class 单例设计模式_饿汉式
{
public static void main(String agrs[]){
Singleton instance=null;//声明对象
instance=Singleton.getInstance();//传递类准备时创建的实例化对象
instance.echo();
}
}
demo_饱汉式
class Singleton
{
/*饱汉式:
1.由于单例设计所以外部不能随意生成实例化对象而生成实例化对象由类的构造方法实现,所以在类中的构造方法应为“private”的。
2.不需要在类准备中提供实例化对象但这个对象是不可被外部随意调用的(private)公用的(static)与饿汉式不同的是在类准备时不需要创建实例化对象而在第一次调用时才创建,
故instance不是不可改变的(非final),所以类准备中提供的对象属性为:private static
3.外部需要实例化对象时,需要类将类准备时产生的实例化对象调用,所以需要一个static方法实现类名直接调用传递实例化对象
且该方法中需要判断第一次调用创建实例化对象,后面调用返回第一次创建的实例化对象
*/
private static Singleton instance;
private Singleton(){};
public static Singleton getInstance(){
if(instance==null){
instance=new Singleton();
}
return instance;
}
public void echo(){
System.out.println("单例设计模式");
}
}
public class 单例设计模式_饱汉式
{
public static void main(String agrs[]){
Singleton instance=null;//声明对象
instance=Singleton.getInstance();//传递类准备时创建的实例化对象
instance.echo();
}
}
demo_多例设计模式
/* 多例设计模式:有的类需要多个实例化对象(如男人与女人。。)
1.由于存在多个实例化对象的需要在类准备时应事先创建实例化对象且属性为 private static final
2.应设计一个static方法分别外部调用实例化对象且该方法需要根据调用的对象不同匹配对应的对象
*/
class Color
{
private String title;
private static final Color RED=new Color("红色");
private static final Color GREEN=new Color("绿色");
private static final Color BLUE=new Color("蓝色");
private Color(String title){
this.title=title;
}
public static Color getInstance(String color){
switch(color){
case "red":
return RED;
case "green":
return GREEN;
case "blue":
return BLUE;
default:
return null;
}
}
public void echo(){
System.out.println(this.title);
}
}
public class 多例设计模式
{
public static void main(String agrs[]){
Color color=Color.getInstance("blue");
color.echo();
}
}
4,枚举
demo_枚举
/*枚举:
1.介绍:枚举是JDK1.5后支持的概念,是为了简化多例设计模式而引进的。为了与多例设计模式兼容,在枚举设计中遗留了许多多例设计模式的特征
2.基本格式: enum 类名{(定义枚举对象)
枚举对象1,枚举对象2,枚举对象3,...;(对象名可以为中文,英文需要大写与多例设计模式兼容)
}
类名 对象名=类名.枚举对象;(调用枚举对象)
3.Enum类:为了和类概念融合,规定每个enum定义的枚举对象都默认继承Enum父类(放置在java.lang中),由于java不支持多重继承所以enum定义的类不能再继承其他类
其中Enum类中的方法在enum定义的枚举对象中都可使用:【name();返回枚举对象的名称】【ordinal();返回枚举对象的序号】【values();以对象数组的形式返回枚举对象】
4.switch语句支持枚举对象匹配
5.每个enum定义的类作为一个类都可以实现类中定义 构造方法 普通方法 (抽象方法一般不用)这里的理解需要对照多例设计模式
其中构造方法必须使用private将其私有化,且一旦设置了带参的构造方法注意在枚举对象中定义参数 (枚举对象(设置参数)))因为根据多例设计模式每个枚举对象都是enum定义的类的一个对象
6.enum定义的类可以实现接口
*/
interface IMessage
{
public abstract String toString();
}
enum Color implements IMessage{
RED("红色"),GREEN("绿色"),BLUE("蓝色");
private String name;
private Color(String name){
this.name=name;
}
public String toString(){
return " 枚举对象:"+this.name;
}
}
public class 枚举
{
public static void main(String agrs[]){
IMessage e=Color.GREEN;
System.out.println(e.toString());
for(Color c:Color.values()){
System.out.println(c.ordinal()+"-"+c.name());
}
Color c=Color.RED;
switch(c){
case RED:
System.out.println("红色");
break;
case GREEN:
System.out.println("绿色");
break;
case BLUE:
System.out.println("蓝色");
break;
}
}
}