大白话的工厂模式
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 判断吗?这样代码不仅臃肿,并且维护要定位哪一种产品的时候也是一种困难。
- 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());
}
}