所谓单例就是一个类只能拥有一个类的实例,既然是一个就是在new的时候 不然他new 把构造方法设置为私有的就可以了
但是这个类还是要让别的访问的 就可以在其内部构造一个私有的 final例子 为什么要私有呢 就是让别的类访问不到,在设置一个公开的静态的方法 在这个方法中返回一个私有的实例,为什么要静态的 调用的时候不能new 啊 静态的就可以直接调用了 有了实例过后 就可以调用其中的方法了啊
例子
package com.fox_ice.SingletonDemo ;
public class SingletonDemo {
public static void main(String [] args)
{
Single s=Single.getSingleInstance();
s.say();
}
}
class Single
{
private Single(){}
private final static Single s1=new Single();
public static Single getSingleInstance()
{
return s1;
}
public void say()
{
System.out.println("java设计模式");
}
}
静态工厂模式顾名思义 就是建造一个工厂里面有很多的东西 拿那个都行
package com.fox_ice.staticFactory;
interface Car
{
public void run();
public void stop();
}
class Benz implements Car
{
public void run()
{
System.out.println("Benz is run");
}
public void stop()
{
System.out.println("Benz is stop");
}
}
class Buick implements Car
{
public void run()
{
System.out.println("Buick is run");
}
public void stop()
{
System.out.println("Buick is stop");
}
}
class Factory
{
public static Car getCarInstance(String type)
{
Car c=null;
try {
c=(Car) Class.forName("com.fox_ice.staticFactory."+type).newInstance(); //java反射机制 获得一个类的实例 个人理解就是 导入一个包的内容 然后new 一下 的到一个实例
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return c;
}
}
public class staticFactory {
public static void main(String[] args) {
Car c=Factory.getCarInstance("Benz");
if(c!=null)
{
c.run();
c.stop();
}
else
{
System.out.println("造不了这种汽车");
}
}
}
这个的好处是 我们可以任意添加汽车类型 不必要在工厂里面修改