设计模式:解决固定问题的固定办法
单例设计模式:对外只能得到一个对象的模式
单例设计模式的实现有两种:
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(); //全部
}
}