Spring

大白话的工厂模式

2019-01-20  本文已影响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 判断吗?这样代码不仅臃肿,并且维护要定位哪一种产品的时候也是一种困难。

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());
    }
}
上一篇下一篇

猜你喜欢

热点阅读