您的位置:首页 > 其它

单例模式 简单工厂模式

2015-07-10 20:55 253 查看
设计模式:解决固定问题的固定办法

单例设计模式:对外只能得到一个对象的模式

单例设计模式的实现有两种:

1:懒汉式
class Person{
private static  Person instance;

private Person(){
System.out.println("===private Person()====");
}

public static Person getInstance(){
if(instance==null){
instance=new Person();
}

return instance;
}

}


1,声明一个私有的静态的本类类型的对象;

2,将构造函数私有化

3,提供一个静态的公有的本类类型方法返回本类类型的对象,对1中的对象进行判断,判断值是否为空,若为空则通过new class 创建,否直接返回声明的对象;

2,:饿汉式

class Person{
private static final Person instance=new Person();

private Person(){
System.out.println("===private Person()====");
}

public static Person getInstance(){
return instance;
}


1,声明一个私有的静态的,最终的本类类型的对象,并实例化

2,构造函数私有化

3,提供一个共有的静态的本类类型的方法返回本类类型的对象

工厂设计模式:

提供批量的实例化对象的功能,且工厂中的方法都是公共的静态的返回接口类型的方法

interface Animal{
void eat();
void sleep();
void move();
}

class Dog implements Animal{
public void eat(){
System.out.println("狗吃");
}
public void sleep(){
System.out.println("狗睡");
}

public void move(){
System.out.println("狗动");
}

public void lookHouse(){
System.out.println("狗看门");
}
}

class Wolf implements Animal{
public void eat(){
System.out.println("狼吃");
}
public void sleep(){
System.out.println("狼睡");
}

public void move(){
System.out.println("狼动");
}

public void shout(){
System.out.println("狼嗷嗷叫");
}
}

/**
* 工厂类的主要职责:生产对象
*/
class SimpleFactory{
/**
* 工厂中的方法都是公共的静态的返回接口类型的方法
*/
public static Animal getInstance(String type){
if("dog".equals(type)){
return new Dog();
}else if("wolf".equals(type)){
return new Wolf();
}else {
System.out.println("无效的类型");
return null;
}
}

static void print(Animal al){
if(al!=null){
al.eat();
al.sleep();
al.move();

if(al instanceof Dog){
Dog dog=(Dog)al;
dog.lookHouse();
}else if(al instanceof Wolf){   //判断是否是由子类上转型转换过来的
Wolf wolf=(Wolf)al;     //下转型转换为子类对象,调用子类新的方法
wolf.shout();
}
}

}

static void exe(){
Animal dog=SimpleFactory.getInstance("dog");
Animal wolf=SimpleFactory.getInstance("wolf");

Animal al=SimpleFactory.getInstance("fox");

SimpleFactory.print(dog);
SimpleFactory.print(wolf);
SimpleFactory.print(al);
}

}

public class TestSimpleFactoryDemo08{
public static void main(String[] args){
/*Animal dog=new Dog();
dog.eat();
dog.sleep();
dog.move();

Animal wolf=new Wolf();
wolf.eat();
wolf.sleep();
wolf.move();*/

/*
Animal dog=new Dog();
Animal wolf=new Wolf();

print(dog);
print(wolf);
*/

SimpleFactory.exe();   //全部

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: