设计模式——工厂模式(Factory)(简单工厂、方法工厂、抽象工厂)

代码: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结构图

简单工厂UML结构图

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结构图

工厂方法UML结构图

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结构图

抽象工厂UML结构图

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();
    }

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值