一、工厂模式
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;
}
}