天天看點

設計模式——工廠模式(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();
    }

}