天天看点

设计模式——工厂模式(Factory)(简单工厂、方法工厂、抽象工厂)0. 简单工厂、方法工厂通用Code1. 简单工厂2. 方法工厂(工厂方法)3. 抽象工厂

文章目录

  • 0. 简单工厂、方法工厂通用Code
  • 1. 简单工厂
    • 1.0 UML结构图
    • 1.1 Code-工厂
    • 1.2 Test
  • 2. 方法工厂(工厂方法)
    • 2.0 UML结构图
    • 2.1 Code-工厂
    • 2.2 Test
  • 3. 抽象工厂
    • 3.0 UML结构图
    • 3.1 Code-手机基础组件类
    • 3.2 Code-工厂
    • 3.3 Test
代码:GitHub

0. 简单工厂、方法工厂通用Code

  • 手机接口
public interface Phone {

    void call();

}
           
  • 华为手机
public class Huawei implements Phone {

    @Override
    public void call() {
        System.out.println("Huawei.call");
    }

}
           
  • 三星手机
public class Samsung implements Phone {

    @Override
    public void call() {
        System.out.println("Samsung.call");
    }

}
           

1. 简单工厂

1.0 UML结构图

设计模式——工厂模式(Factory)(简单工厂、方法工厂、抽象工厂)0. 简单工厂、方法工厂通用Code1. 简单工厂2. 方法工厂(工厂方法)3. 抽象工厂

1.1 Code-工厂

/**
 * 简单工厂-手机的工厂
 *
 * @author ALion
 * @version 2019/1/26 0:18
 */
public class PhoneFactory {

    public static Phone create(String type) {
        Phone phone = null;
        switch (type) {
            case "Samsung":
                phone = new Samsung();
                break;
            case "Huawei":
                phone = new Huawei();
            default:

        }
        return phone;
    }

}
           

1.2 Test

import com.skey.designpattern.factory.simple.PhoneFactory;

/**
 * 测试-简单工厂模式
 *
 * @author ALion
 * @version 2019/1/26 0:13
 */
public class SimpleFactoryTest {

    public static void main(String[] args) {
        Phone samsung = PhoneFactory.create("Samsung");
        Phone huawei = PhoneFactory.create("Huawei");

        samsung.call();
        huawei.call();
    }

}
           

2. 方法工厂(工厂方法)

2.0 UML结构图

设计模式——工厂模式(Factory)(简单工厂、方法工厂、抽象工厂)0. 简单工厂、方法工厂通用Code1. 简单工厂2. 方法工厂(工厂方法)3. 抽象工厂

2.1 Code-工厂

  • 手机工厂
public interface PhoneFactory {

    /**
     * 创建手机对象
     * @return 手机对象
     */
    Phone create();

}
           
  • 华为手机工厂
public class HuaweiFactory implements PhoneFactory {

    @Override
    public Phone create() {
        return new Huawei();
    }

}
           
  • 三星手机工厂
public class SamsungFactory implements PhoneFactory {

    @Override
    public Phone create() {
        return new Samsung();
    }

}
           

2.2 Test

import com.skey.designpattern.factory.method.HuaweiFactory;
import com.skey.designpattern.factory.method.SamsungFactory;

/**
 * 方法工厂测试
 *
 * @author ALion
 * @version 2019/1/26 0:48
 */
public class MethodFactoryTest {

    public static void main(String[] args) {
        Phone huawei = new HuaweiFactory().create();
        Phone samsung = new SamsungFactory().create();

        huawei.call();
        samsung.call();
    }

}
           

3. 抽象工厂

3.0 UML结构图

设计模式——工厂模式(Factory)(简单工厂、方法工厂、抽象工厂)0. 简单工厂、方法工厂通用Code1. 简单工厂2. 方法工厂(工厂方法)3. 抽象工厂

3.1 Code-手机基础组件类

  • CPU
    • CPU接口
    public interface CPU {
    
        void frequency();
    
        void cores();
    
    }
               
    • 高端CPU
    public class HighCPU implements CPU {
    
        @Override
        public void frequency() {
            System.out.println("HighCPU.frequency = " + "3.0GHZ");
        }
    
        @Override
        public void cores() {
            System.out.println("HighCPU.cores = " + "8");
        }
    }
               
    • 中端CPU
    public class MediumCPU implements CPU {
    
        @Override
        public void frequency() {
            System.out.println("MediumCPU.frequency = " + "2.0GHZ");
        }
    
        @Override
        public void cores() {
            System.out.println("MediumCPU.cores = " + "4");
        }
    }
               
    • 低端CPU
    public class LowCPU implements CPU {
    
        @Override
        public void frequency() {
            System.out.println("LowCPU.frequency = " + "1.0GHZ");
        }
    
        @Override
        public void cores() {
            System.out.println("LowCPU.cores = " + "1");
        }
    
    }
               
  • Memory
    • 同上
  • Screen
    • 同上

3.2 Code-工厂

  • 手机工厂
import com.skey.designpattern.factory.abstractfactory.cpu.CPU;
import com.skey.designpattern.factory.abstractfactory.memory.Memory;
import com.skey.designpattern.factory.abstractfactory.screen.Screen;

/**
 * 手机工厂
 *
 * @author ALion
 * @version 2019/1/26 1:29
 */
public interface PhoneFactory {

    CPU createCPU();

    Memory createMemory();

    Screen createScreen();

}
           
  • 好手机的工厂
import com.skey.designpattern.factory.abstractfactory.cpu.CPU;
import com.skey.designpattern.factory.abstractfactory.cpu.HighCPU;
import com.skey.designpattern.factory.abstractfactory.memory.HighMemory;
import com.skey.designpattern.factory.abstractfactory.memory.Memory;
import com.skey.designpattern.factory.abstractfactory.screen.HighScreen;
import com.skey.designpattern.factory.abstractfactory.screen.Screen;

/**
 * 好手机的工厂
 *
 * @author ALion
 * @version 2019/1/26 1:31
 */
public class GoodPhoneFactory implements PhoneFactory {

    @Override
    public CPU createCPU() {
        return new HighCPU();
    }

    @Override
    public Memory createMemory() {
        return new HighMemory();
    }

    @Override
    public Screen createScreen() {
        return new HighScreen();
    }

}
           
  • 坏手机的工厂
import com.skey.designpattern.factory.abstractfactory.cpu.CPU;
import com.skey.designpattern.factory.abstractfactory.cpu.HighCPU;
import com.skey.designpattern.factory.abstractfactory.cpu.LowCPU;
import com.skey.designpattern.factory.abstractfactory.memory.HighMemory;
import com.skey.designpattern.factory.abstractfactory.memory.LowMemory;
import com.skey.designpattern.factory.abstractfactory.memory.Memory;
import com.skey.designpattern.factory.abstractfactory.screen.HighScreen;
import com.skey.designpattern.factory.abstractfactory.screen.LowScreen;
import com.skey.designpattern.factory.abstractfactory.screen.Screen;

/**
 * 坏手机的工厂
 *
 * @author ALion
 * @version 2019/1/26 1:31
 */
public class BadPhoneFactory implements PhoneFactory {

    @Override
    public CPU createCPU() {
        return new LowCPU();
    }

    @Override
    public Memory createMemory() {
        return new LowMemory();
    }

    @Override
    public Screen createScreen() {
        return new LowScreen();
    }

}
           

3.3 Test

import com.skey.designpattern.factory.abstractfactory.BadPhoneFactory;
import com.skey.designpattern.factory.abstractfactory.GoodPhoneFactory;
import com.skey.designpattern.factory.abstractfactory.PhoneFactory;
import com.skey.designpattern.factory.abstractfactory.cpu.CPU;
import com.skey.designpattern.factory.abstractfactory.memory.Memory;
import com.skey.designpattern.factory.abstractfactory.screen.Screen;

/**
 * 抽象工厂测试
 *
 * @author ALion
 * @version 2019/1/26 1:34
 */
public class AbstractFactoryTest {

    public static void main(String[] args) {
        // 测试生产好手机
        goodPhone();

        // 测试生产坏手机
        badPhone();
    }

    public static void goodPhone() {
        System.out.println("AbstractFactoryTest.goodPhone ---> 好手机");
        PhoneFactory factory = new GoodPhoneFactory();

        show(factory);
    }

    public static void badPhone() {
        System.out.println("AbstractFactoryTest.badPhone ---> 坏手机");
        PhoneFactory factory = new BadPhoneFactory();

        show(factory);
    }

    public static void show(PhoneFactory factory) {
        CPU cpu = factory.createCPU();
        cpu.frequency();
        cpu.cores();

        Memory memory = factory.createMemory();
        memory.capacity();
        memory.generation();

        Screen screen = factory.createScreen();
        screen.resolution();
        screen.color();
    }

}