美文网首页
工厂模式(包括3个设计模式)

工厂模式(包括3个设计模式)

作者: 会思考的鸭子 | 来源:发表于2017-07-09 15:14 被阅读0次

    优点

    实现了创建者和调用者的分离

    详细分类

    • 简单工厂模式
      用来生产同一等级结构中的任意产品(对于增加的产品,需要修改已有代码)
    • 工厂方法模式
      用来生产同一等级结构中的固定产品(支持增加任意产品)
    • 抽象工厂模式
      用来生产不同产品族的全部产品(对于增加的新产品,无能为力,支持增加产品族)

    简单工厂

    1. 首先是没有简单工厂类的情况


      image.png
    package com.amberweather.simplefactory;
    public class Client1 {
            public static void main(String[] args) {
                    Car c1 = new Audi();
                    Car c2 = new Byd();
                    c1.run();
                    c2.run();
            }
    }
    
    image.png

    调用者需要知道的非常多,才能创建具体的实现类

    1. 再来看看有简单工厂类的情况


      image.png
    package com.amberweather.simplefactory;
    /**
     * 
     * 简单工厂
     */
    import com.amberweather.factorymethod.Audi;
    import com.amberweather.factorymethod.Byd;
    import com.amberweather.factorymethod.Car;
    
    public  class CarFactory {
    
        public static Car creatCar(String type){
            if("奥迪".equals(type)){
                return new Audi();
            }else if("比亚迪".equals(type)){
                return new Byd();
            }else{
                return null;
            }
        }
    }
    
    package com.amberweather.simplefactory;
    /**
     * 客户端
     * @author HT
     *
     */
    public class Client2 {
            public static void main(String[] args){
                    Car car1 = CarFactory.creatCar("奥迪");
                    Car car2 = CarFactory.creatCar("比亚迪");
                    car1.run();
                    car2.run();
             }
    }
    

    运行效果同上,调用者不用知道许多细节
    缺点,增加一个具体的类,需要修改源代码,违反开闭原则。

    工厂方法模式

    image.png
    package com.amberweather.factorymethod;
    
    /**
     * 工厂的统一接口
     * 
     * @author HT
     *
     */
    public interface CarFactory {
        Car createCar();
    }
    
    package com.amberweather.factorymethod;
    /**
     * 具体的奥迪工厂
     * @author HT
     *
     */
    
    public class AudiFactory implements CarFactory {
        public Car createCar() {
            return new Audi();
        }
    }
    
    package com.amberweather.factorymethod;
    /**
     * 客户端
     * @author HT
     *
     */
    public class Client {
        public static void main(String[] args){
            Car c1 = new AudiFactory().createCar();
            Car c2 = new BydFactory().createCar();
            c1.run();
            c2.run();
        }
    }
    

    运行效果同上。

    抽象工厂模式

    在有多个业务品种、业务分类(产品族)时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。
    什么是产品族?


    image.png

    UML图


    image.png

    观察用例图可知,抽象工厂模式实际上是在工厂方法模式的基础上,对里面的具体的工厂不再直接返回一个类,而是返回多个零件(组成产品族),当然他们实现的接口也要相应改变(返回产品族),代码可以由同学们下来具体实现。

    相关文章

      网友评论

          本文标题:工厂模式(包括3个设计模式)

          本文链接:https://www.haomeiwen.com/subject/lqishxtx.html