工厂

作者: 知道吗123 | 来源:发表于2019-12-19 10:01 被阅读0次

工厂方法模式
定义了一个创建对象的接口,由子类决定要实例化的子类是哪一个,工厂方法让类把实例化推迟到子类
工厂方法侧重于重用框架,只是具体对象的创建.由业务方自己根据需要创建,类似模板方法,都是重用算法,只是一个客户端自己定制方法,一个客户端自己创建对象

/**
 * 鼠标加工店
 */
public abstract class MouseStore {

    /**
     * 整个鼠标下单,获取鼠标元件,加工,包装,配送主体流程(算法)
     * 都已经定制好,只是鼠标元件这个对象根据地区不同,不确定
     * @return
     */
    public abstract Mouse createMouse();

    /**
     * 购买鼠标
     * @return
     */
    public Mouse orderMouse(){
        //xxx下单.
        Mouse mouse = createMouse();
        //商店的加工流程希望所有分店保持一致,但是鼠标原件可以根据地区找最适合的鼠标
        mouse.getName();
        //mouse.setColor("red");
        //mouse.setIcon("http://sdsdsd.jpg");
        //mouse.tiemo("ganghuamo");
        //mouse.baozhuang("xxx");
        //mouse.出货();
        //mouse.配送();
        return mouse;
    }

}

/**
 * 北京鼠标分店
 */
public class BeijingMouseStore extends MouseStore{
    /**
     * 子类
     * @return
     */
    @Override
    public Mouse createMouse() {
        //假如惠普电脑的产地就在北京,北京分店就拿惠普的鼠标原件
        return new HpMouse();
    }

}

抽象工厂提供一个接口,用于创建相关或依赖对象的家族,(Mouse,KeyBoard).


public interface Factory {

    // 生产鼠标
    Mouse createMouse();

    // 生产键盘
    KeyBoard createKeyBoard();

}
public class AcerFactory implements Factory {
    @Override
    public Mouse createMouse() {
        return new AcerMouse();
    }

    @Override
    public KeyBoard createKeyBoard() {
        return new AcerKeyBoard();
    }
}
public class LenovoFactory implements Factory {
    @Override
    public Mouse createMouse() {
        return new LenovoMouse();
    }

    @Override
    public KeyBoard createKeyBoard() {
        return new LenovoKeyBoard();
    }
}


抽象工厂主要是创建产品族,这些产品对象之间有一定的关系(像策略模式,产品组是否可以互相替换)
工厂方法重点在重用框架,框架唯一未确定的部分在于某个具体对象的创建(像模板方法)

模板方法:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。(类比工厂方法,其实可不可以想成是模板方法的特例,只是这个延迟到子类实现的方法是用于创建对象的)

这里说的框架也只是一些类.但是区别于工具类(Random,Math),是main方法的某一个环节,框架是main方法
eg:
//这里Collections::sort就相当于框架(模板方法模式,不过不用局限于是否使用继承).,排序算法已经是写好的(框架实现了该算法),其中变化的部分是对象的比较方法(我们实现).那排序算法就可以算一个框架.
Collections.sort(stus, new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
return s1.getAge()-s2.getAge();
}
}
);
//这里的Math就是一个工具类
public void playGame(){
Student s = new Student();
s.speal();
s.eat();
s.cost(Math.random());
}

相关文章

  • 工厂!工厂!

    我是14年去广东的。街上挂着红色的条幅,扫黄打非! 10个月后,我就离开了那里。往后的数年到如今,每当同事和我聊起...

  • 工厂模式

    工厂模式 工厂模式分为 简单(静态)工厂 工厂方法 抽象工厂 下面分别介绍这几总工厂模式 简单工厂 (静态工厂) ...

  • 第一章2.0工厂- 基础类准备

    2.1工厂-简单工厂模式2.2工厂-工厂方法模式2.3工厂-抽象工厂模式

  • 设计模式

    设计模式 工厂模式生成bean 工厂模式分为静态工厂和实例工厂 静态工厂: 实例工厂

  • 创建型模式-抽象工厂模式

    多个工厂创建多个产品族。 抽象工厂模式: 抽象工厂模式:围绕一个超级工厂创建其他工厂。该超级工厂称为其他工厂的工厂...

  • 简单工厂、工厂、抽象工厂

    参考1参考2参考3

  • 简单工厂+工厂+抽象工厂

    下面例子中鼠标,键盘,耳麦为产品,惠普,戴尔为工厂。 简单工厂模式 简单工厂模式不是 23 种里的一种,简而言之,...

  • 工厂模式

    工厂模式细分三种:简单工厂模式、工厂模式、抽象工厂模式。 工厂模式相当于抽象了简单工厂模式的工厂类,而抽象工厂模式...

  • 常用设计模式

    设计模式 工厂模式 工厂模式思路上分:简单工厂模式,工厂模式, 抽象工厂模式// 抽象工厂模式可以代替工厂模式,做...

  • 设计模式-3种工厂模式

    工厂模式包括:简单工厂模式,工厂方法模式,抽象工厂模式 简单工厂模式 工厂方法根据参数直接创建实例:工厂->产品 ...

网友评论

      本文标题:工厂

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