学习工厂模式

一、为什么要使用工厂模式?

1、解耦,工厂模式是为了隐藏new 对象的过程(对象创建的具体细节),由工厂去创建实例,这样即便以后你改了类,也不需要修改工厂创建类的相关代码;

2、面向接口编程(复用性强)

二、工厂模式的种类

简单工厂,工厂方法,抽象工厂

 参考博客:  http://blog.csdn.net/lqw05/article/details/51909449

区别1: 工厂方法是简单工厂的升级版,工厂方法符合 开闭原则(增加新工厂不改变原来的代码);

区别&&思考: 工厂方法和抽象工厂的区别?(本质上好像没什么区别)

以小米手机为例,现在需要产生小米手机2和小米3

/**
 * Created by Administrator on 2018/3/10.
 * 手机基类
 */
@Data
public class MobileDto {

    private String logo;
    private String maker;

}
/**
 * Created by Administrator on 2018/3/10.
 */
@Data
public class XiaoMi2sMobile extends MobileDto{

}
/**
 * Created by Administrator on 2018/3/10.
 */
@Data
public class XiaoMi3Mobile extends MobileDto{

}
View Code
/**
 * Created by Administrator on 201
/**
 * Created by Administrator on 2018/3/10.
 * 抽象工厂
 */
public abstract class AbstractMobileFactory {
   // 抽象类属性
   public abstract MobileDto createXiaoMi3Mobile();
    public abstract MobileDto createXiaoMi2sMobile();

}
/**
 * Created by Administrator on 2018/3/10.
 */
public class XiaoMiMobileFactory extends AbstractMobileFactory {


    @Override
    public MobileDto createXiaoMi3Mobile() {
        System.out.println("我是小米手机3");
        return new XiaoMi3Mobile();
    }

    @Override
    public MobileDto createXiaoMi2sMobile() {
        System.out.println("我是小米手机2s");
        return new XiaoMi2sMobile();
    }
}

 

/*
*8/3/10. * 工厂方法模式
*/ public interface MobileFactory { MobileDto createMobile(); } /** * Created by Administrator on 2018/3/10. */ public class XiaoMi2sFactory implements MobileFactory { @Override public MobileDto createMobile() { System.out.println("我是小米手机2s"); return new XiaoMi2sMobile(); } } /** * Created by Administrator on 2018/3/10. */ public class XiaoMi3Factory implements MobileFactory { @Override public MobileDto createMobile() { System.out.println("我是小米手机3"); return new XiaoMi3Mobile(); } }

 

/**
 * Created by Administrator on 2018/3/10.
*测试
 */
public class test {

    public static void main(String[] args) {
        MobileFactory m=new XiaoMi2sFactory();
        MobileDto mobileDto2s=new XiaoMi2sFactory().createMobile();
        MobileDto mobileDto3=new XiaoMi3Factory().createMobile();
        AbstractMobileFactory abstractMobileFactory  = new XiaoMiMobileFactory();
        mobileDto2s=abstractMobileFactory.createXiaoMi2sMobile();
        mobileDto3=abstractMobileFactory.createXiaoMi3Mobile();
    }

}

反思--------------------->如果用工厂方法模式达到这样的效果的话,是不是会产生更多的工厂类,网上很多人都是说多个一个产品多个系列就用抽象工厂,确实会简化很多,但是感觉都能实现.抽象工厂会减少工厂类的创建,,本质上好像没什么差别,(隐藏对类的创建).工厂方法模式符合开闭原则,抽象工厂就破坏了这个原则.

告一段落!

 

posted on 2018-03-10 16:44  爱不死  阅读(293)  评论(0编辑  收藏  举报