博客
关于我
《研磨设计模式》chap7 抽象工厂 Abstract Factory
阅读量:62 次
发布时间:2019-02-25

本文共 4578 字,大约阅读时间需要 15 分钟。

?????????CPU???

  • ????
  • 1.1 CPU

    Intel?CPU???

    public class IntelCPU implements CPUApi {    private int pins = 0;    public IntelCPU(int pins) {        this.pins = pins;    }    public void calculate() {        System.out.println("now in Intel CPU,pins=" + pins);    }}

    AMDCPU?

    public class AMDCPU implements CPUApi {    private int pins = 0;    public AMDCPU(int pins) {        this.pins = pins;    }    public void calculate() {        System.out.println("now in AMD CPU,pins=" + pins);    }}

    1.2 ??

    ??????

    public interface MainboardApi {    public void installCPU();}

    ?????

    public class GAMainboard implements MainboardApi {    private int cpuHoles = 0;    public GAMainboard(int cpuHoles) {        this.cpuHoles = cpuHoles;    }    public void installCPU() {        System.out.println("now in GAMainboard,cpuHoles=" + cpuHoles);    }}

    ?????

    public class MSIMainboard implements MainboardApi {    private int cpuHoles = 0;    public MSIMainboard(int cpuHoles) {        this.cpuHoles = cpuHoles;    }    public void installCPU() {        System.out.println("now in MSIMainboard,cpuHoles=" + cpuHoles);    }}

    1.3 ??CPU??????

    ??CPU??????

    public class CPUFactory {    public static CPUApi createCPUApi(int type) {        CPUApi cpu = null;        if (type == 1) {            cpu = new IntelCPU(1156);        } else if (type == 2) {            cpu = new AMDCPU(939);        }        return cpu;    }}

    ??????????

    public class MainboardFactory {    public static MainboardApi createMainboardApi(int type) {        MainboardApi mainboard = null;        if (type == 1) {            mainboard = new GAMainboard(1156);        } else if (type == 2) {            mainboard = new MSIMainboard(939);        }        return mainboard;    }}

    1.4 ???

    public class ComputerEngineer {    private CPUApi cpu = null;    private MainboardApi mainboard = null;    public void makeComputer(int cpuType, int mainboardType) {        prepareHardwares(cpuType, mainboardType);        // ????        // ????        // ????    }    private void prepareHardwares(int cpuType, int mainboardType) {        this.cpu = CPUFactory.createCPUApi(cpuType);        this.mainboard = MainboardFactory.createMainboardApi(mainboardType);        this.cpu.calculate();        this.mainboard.installCPU();    }}

    client?

    public static void main(String[] args) {    ComputerEngineer engineer = new ComputerEngineer();    engineer.makeComputer(1, 2);}
    1. ????????
    2. ??????????

      public interface AbstractFactory {    public AbstractProductA createProductA();    public AbstractProductB createProductB();}
      public class Schema1 implements AbstractFactory {    public CPUApi createCPUApi() {        return new IntelCPU(1156);    }    public MainboardApi createMainboardApi() {        return new GAMainboard(1156);    }}
      public class ComputerEngineer {    private CPUApi cpu = null;    private MainboardApi mainboard = null;    private MemoryApi memory = null;    public void makeComputer(AbstractFactory schema) {        prepareHardwares(schema);        // ????        // ????        // ????    }    private void prepareHardwares(AbstractFactory schema) {        this.cpu = (CPUApi) schema.createProduct(1);        this.mainboard = (MainboardApi) schema.createProduct(2);        this.memory = (MemoryApi) schema.createProduct(3);        this.cpu.calculate();        this.mainboard.installCPU();        if (memory != null) {            this.memory.cacheData();        }    }}
      1. ????????
      2. public class Schema3 implements AbstractFactory {    public Object createProduct(int type) {        Object retObj = null;        if (type == 1) {            retObj = new IntelCPU(1156);        } else if (type == 2) {            retObj = new GAMainboard(1156);        } else if (type == 3) {            retObj = new HyMemory();        }        return retObj;    }}

        public class ComputerEngineer {private CPUApi cpu = null;private MainboardApi mainboard = null;private MemoryApi memory = null;

        public void makeComputer(AbstractFactory schema) {    prepareHardwares(schema);    // ????    // ????    // ????}private void prepareHardwares(AbstractFactory schema) {    this.cpu = (CPUApi) schema.createProduct(1);    this.mainboard = (MainboardApi) schema.createProduct(2);    this.memory = (MemoryApi) schema.createProduct(3);    this.cpu.calculate();    this.mainboard.installCPU();    if (memory != null) {        this.memory.cacheData();    }}

        }

        public static void main(String[] args) {ComputerEngineer engineer = new ComputerEngineer();AbstractFactory schema = new Schema3();engineer.makeComputer(schema);}

        ??????????????????????????????????????????????????

    转载地址:http://gvq.baihongyu.com/

    你可能感兴趣的文章
    python filter过滤器的使用_python基础知识分享:zip()、filter函数和reduce如何使用?...
    查看>>
    python flask 请求code 400, message Bad request version
    查看>>
    Python UTC 日期时间对象的 ISO 格式不包括 Z(祖鲁语或零偏移)
    查看>>
    python valueerror object2_python遇到错误记录
    查看>>
    Python virtualenv
    查看>>
    python vue3实现大文件分段续传(断点续传)--带暂停和继续功能
    查看>>
    Python WebDriver如何打印整个页面源(html)
    查看>>
    python 使用execjs 报编码错误解决办法,UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xac in position 145: il
    查看>>
    python 复习计划
    查看>>
    Python 多处理 Numpy 随机
    查看>>
    Python 多处理:在第一个子错误时中止映射
    查看>>
    Python 多处理不断产生 pythonw.exe 进程而不做任何实际工作
    查看>>
    Python 多处理如何优雅地退出?
    查看>>
    Python 多处理模块的 .join() 方法到底在做什么?
    查看>>
    python 学习 面向对象编程
    查看>>
    Python基础语法与执行脚本的3种方式
    查看>>
    python基础篇(1):type()
    查看>>
    python基础篇(15):闭包
    查看>>
    python基础篇(11):封装
    查看>>
    python基础篇(10):自定义包
    查看>>