一、工厂模式

1、工厂模式:

工厂就是为我们实例化对象,用工厂方法代替new操作。工厂模式包括工厂方法模式和抽象工厂模式,而抽象工厂模式是工厂方法模式的扩展。
2、工厂模式的意图:定义一个接口来创建对象,但是让子类来决定哪些类需要被实例化,工厂方法吧实例化的工作推迟到子类中去实现。
3、什么情况下适合工厂模式?
   有一组类似的对象需要创建。在编码时不能预知需要创建那种累的实例。系统需要考虑扩展性,不应依赖于产品类实现如何被创建、组合和表达的细节。
4、工厂模式的动机:
  在项目中,经常面临着对象要随需求的变化而变化的情况,而工厂模式的目的就是,降低耦合,使其他依赖该对象的对象不随之改变。基于项目现状将代码进行如下设计:
  尽量松耦合,一个对象的依赖对象的变化与本身无关, 具体产品与客户端剥离,责任分割。
package factory;
 
public interface Boy {
public void drawMan();
}
package factory;
 
public interface Girl {
public void drawWowen();
 
}
package factory;
public class HNBoy implements Boy{
 
@Override
public void drawMan() {
// TODO Auto-generated method stub
System.out.println("HNBoy.drawMan()");
}
}
package factory;
 
public class HNFactory implements PersonFactory{
 
@Override
public Boy getBoy() {
// TODO Auto-generated method stub
return new HNBoy();
}
 
@Override
public Girl getGirl() {
// TODO Auto-generated method stub
return new HNGirl();
}
 
}
package factory;
/*
* 新年系列女孩
*/
public class HNGirl implements Girl{
 
@Override
public void drawWowen() {
// TODO Auto-generated method stub
System.out.println("HNGirl.drawWowen()");
}
 
}
package factory;
 
public class MCBoy implements Boy{
 
@Override
public void drawMan() {
// TODO Auto-generated method stub
System.out.println("MCBoy.drawMan()");
}
}
package factory;
/*
* 圣诞加工厂
*/
 
public class MCFactory implements PersonFactory{
 
@Override
public Boy getBoy() {
// TODO Auto-generated method stub
return new MCBoy();
}
 
@Override
public Girl getGirl() {
// TODO Auto-generated method stub
return new MCGirl();
}
 
}
package factory;
/*
* 圣诞女孩类
*/
public class MCGirl implements Girl {
 
@Override
public void drawWowen() {
// TODO Auto-generated method stub
System.out.println("圣诞系列女孩");
}
 
}
package factory;
/*
* 人物实现接口
*/
public interface PersonFactory {
//男孩接口
public Boy getBoy();
//女孩接口
public Girl getGirl();
 
}
 
二、单例模式
强烈建议写法:
public class singleton{
       private singleton(){
}
       private static singleton instance=new singleton();
       public static singleton getInstance(){
                     return instance;    
     }
}