• 设计模式一抽象工厂模式


    概述
      通过工厂创建的对象,彼此之间是有关联的,是需要相互匹配的,
      而简单工厂并没有解决对象之间相互依赖匹配的问题

      合理解决方案就是使用抽象工厂设计模式:提供一个创建一系列相关或者相互依赖的接口
      
    接口内部严格按照相关或相互依赖的对象关系创建,
      切勿堆积其它没有用的方法或者无关联关系的方法

    组成

    AbstractFactory:抽象工厂,提供统一的接口工厂。

    ConcreteFactory:具体工厂,用来创建具体的带有关联关系的实例产品

    AbstractProduct:统一的产品接口

    ConcreteProduct:具体产品

    优点:解耦

    缺点:不容易扩展

      1 public class Client {
      2     public static void main(String[] args) {
      3         ConcreteFactory1 a = new ConcreteFactory1();
      4         CPUApi cpu = a.createCpu();
      5         MainBoardApi mainBoard = a.createMainBoard();
      6         cpu.calculate();
      7         mainBoard.installCpu();
      8 
      9     }
     10 }
     11 
     12 
     13 //CPU的模拟方法
     14 public interface CPUApi {
     15     public void calculate();
     16 }
     17 
     18 //主板模拟方法
     19 public interface MainBoardApi {
     20     public void installCpu();
     21 }
     22 
     23 //cpu实现
     24 public class IntelCpu implements CPUApi {
     25     private int pins = 0;
     26 
     27     public IntelCpu(int pins) {
     28         // TODO Auto-generated constructor stub
     29         this.pins = pins;
     30     }
     31 
     32     @Override
     33     public void calculate() {
     34         // TODO Auto-generated method stub
     35         System.out.println("INTEL CPU 针脚数:" + pins);
     36     }
     37 }
     38 
     39 public class AMDCpu implements CPUApi {
     40     private int pins = 0;
     41 
     42     public AMDCpu(int pins) {
     43         // TODO Auto-generated constructor stub
     44         this.pins = pins;
     45     }
     46 
     47     @Override
     48     public void calculate() {
     49         // TODO Auto-generated method stub
     50         System.out.println("AMD CPU针脚数:" + pins);
     51     }
     52 }
     53 
     54 //主板实现
     55 public class GAMainBoard implements MainBoardApi {
     56     private int cpuHoles = 0;
     57 
     58     public GAMainBoard(int cpuHoles) {
     59         // TODO Auto-generated constructor stub
     60         this.cpuHoles = cpuHoles;
     61     }
     62 
     63     @Override
     64     public void installCpu() {
     65         // TODO Auto-generated method stub
     66         System.out.println("GA MainBoard 插孔数:" + cpuHoles);
     67     }
     68 
     69 }
     70 
     71 public class MSIMainBoard implements MainBoardApi {
     72     private int cpuHoles = 0;
     73 
     74     public MSIMainBoard(int cpuHoles) {
     75         // TODO Auto-generated constructor stub
     76         this.cpuHoles = cpuHoles;
     77     }
     78 
     79     @Override
     80     public void installCpu() {
     81         // TODO Auto-generated method stub
     82         System.out.println("MSI MainBord 插孔数:" + cpuHoles);
     83     }
     84 
     85 }
     86 
     87 //抽象工厂
     88 public interface AbstractFactory {
     89     public CPUApi createCpu();
     90 
     91     public MainBoardApi createMainBoard();
     92 }
     93 
     94 //抽象工厂具体实现
     95 public class ConcreteFactory1 implements AbstractFactory {
     96 
     97     //两者之间有联系
     98     @Override
     99     public CPUApi createCpu() {
    100         // TODO Auto-generated method stub
    101         return new AMDCpu(1156);
    102     }
    103 
    104     @Override
    105     public MainBoardApi createMainBoard() {
    106         // TODO Auto-generated method stub
    107         return new MSIMainBoard(1156);
    108     }
    109 }
    110 
    111 public class ConcreteFactory2 implements AbstractFactory {
    112 
    113     //两者之间有联系
    114     @Override
    115     public CPUApi createCpu() {
    116         // TODO Auto-generated method stub
    117         return new AMDCpu(939);
    118     }
    119 
    120     @Override
    121     public MainBoardApi createMainBoard() {
    122         // TODO Auto-generated method stub
    123         return new MSIMainBoard(939);
    124     }
    125 
    126 }
  • 相关阅读:
    exercise 1-6
    第五章 Inheritance继承
    wk1&2 字符串
    <转>Python 多线程的单cpu与cpu上的多线程的区别
    Python字典增删操作技巧简述
    Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
    <转>Python3.x和Python2.x的区别介绍
    <转>Python运行的17个时新手常见错误小结
    常见测试流程
    <转>数据库设计的三大范式
  • 原文地址:https://www.cnblogs.com/loveer/p/11273161.html
Copyright © 2020-2023  润新知