美文网首页Spring
大白话的工厂模式

大白话的工厂模式

作者: 半数的年 | 来源:发表于2019-01-20 09:48 被阅读0次

    1、工厂模式

    当用户购买产品的时候,不想去一个一个的小作坊看产品(换做程序的角度就是new 一个一个的对象),用户会选择一个大的工厂去看、选择产品,这样的产品才有质量保证,工厂一般都有严格的生产标准。

    (1)简单工厂模式

    用户要去电脑城买配件,直接告诉工厂配件的名字,工厂就把配件的对象new给用户了。

    public class SimpleFactory {
        public static ComputerPart getCar(String name){
            if (name.equals("cpu")){
                return new Cpu();
            }else if (name.equals("mainboard")){
                return new Mainboard();
            }else if (name.equals("memory")){
                return new Memory();
            }else if (name.equals("videocard")){
                return new VideoCard();
            }else {
                System.out.println("sorry, 没有找到你要的配件");
                return null;
            }
        }
    }
    

    Test

    public class SimpleFactoryTest {
        public static void main(String[] args) {
            ComputerPart part = SimpleFactory.getCar("cpu");
            if (part != null)
                System.out.println(part.getPart());
        }
    }
    

    (2)工厂方法模式

    简单工厂模式对用户来说是合适的,但对于一个工厂的管理,却是难以去维护的,按照程序的角度,当产品有成千上万种,要一直一直去if else 判断吗?这样代码不仅臃肿,并且维护要定位哪一种产品的时候也是一种困难。

    • intel厂家的cpu
    public class IntelFactory {
        public static ComputerPart getPart(){
            return new Cpu();
        }
    }
    
    • 金士顿的内存
    public class KingshidunFactory {
        public static ComputerPart getPart(){
            return new Memory();
        }
    }
    
    • 华硕的主板和显卡
    public class HuaShuoFactory {
        public static ComputerPart getMainboard(){
            return new Mainboard();
        }
        public static ComputerPart getVideoCard(){
            return new VideoCard();
        }
    }
    

    Test

    public class FuncFactoryTest {
        public static void main(String[] args) {
            ComputerPart part = HuaShuoFactory.getMainboard();
            if (part != null)
                System.out.println(part.getPart());
        }
    }
    

    (3)、抽象工厂模式

    按照方法工厂模式,如果买电脑配件的用户不是对厂家很熟悉,那不是得让用户抓狂,用户心中肯定mmp:我就想买条内存,你居然还让我自己选择哪个厂家的,我还得去了解厂家。

    AbstractFactory.java

    public abstract class AbstractFactory {
        public abstract ComputerPart getCpu();
        public abstract ComputerPart getMainBoard();
        public abstract ComputerPart getMemory();
        public abstract ComputerPart getVideoCard();
    }
    

    DefaultFactory:店家可以很好管理哪些配件是哪些厂家的

    public class DefaultFactory extends AbstractFactory{
        public ComputerPart getCpu() {
            return IntelFactory.getPart();
        }
        public ComputerPart getMainBoard() {
            return HuaShuoFactory.getMainboard();
        }
        public ComputerPart getMemory() {
            return KingshidunFactory.getPart();
        }
        public ComputerPart getVideoCard() {
            return HuaShuoFactory.getVideoCard();
        }
    }
    

    Test : 用户不用去管配件是哪个厂家生产的,就直接通过店家说产品的名字就行。

    public class AbstractFactoryTest {
        public static void main(String[] args) {
            DefaultFactory factory = new DefaultFactory();
            ComputerPart part = factory.getMainBoard();
            if (part != null)
                System.out.println(part.getPart());
        }
    }
    

    相关文章

      网友评论

        本文标题:大白话的工厂模式

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