每日一贴,今天的内容关键字为装机主板

@@@模式定义:

提供一个创立一系列相干或互相依赖对象的接口,而无需指定它们具体的类。

@@@训练示例:

选择组装电脑的配件。

@@@示例代码:

src\computer\CPUApi.java

~~~~~~~~~~~~~~~~~~~~~~~~

package computer;
/*** CPU的接口*/
public interface CPUApi {/*** 示意方法,CPU拥有运算的功能*/public void calculate();
}

src\computer\IntelCPU.java

~~~~~~~~~~~~~~~~~~~~~~~~~~

package computer;/*** Intel的CPU实现*/
public class IntelCPU implements CPUApi {/*** CPU的针脚数目*/private int pins = 0;/*** 构造方法,传入CPU的针脚数目* @param pins CPU的针脚数目*/public IntelCPU(int pins) {this.pins = pins;}public void calculate() {System.out.println("now in Intel CPU, pins=" + pins);}
}

src\computer\AMDCPU.java

~~~~~~~~~~~~~~~~~~~~~~~~

package computer;/*** AMD的CPU实现*/
public class AMDCPU implements CPUApi {/*** CPU的针脚数目*/private int pins = 0;/*** 构造方法,传入CPU的针脚数目* @param pins CPU的针脚数目*/public AMDCPU(int pins) {this.pins = pins;}public void calculate() {System.out.println("now in AMD CPU, pins=" + pins);}
}

src\computer\MainBoardApi.java

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

package computer;/*** 主板的接口*/
public interface MainBoardApi {/*** 示意方法,主板拥有安装CPU的功能*/public void installCPU();
}

src\computer\GAMainBoard.java

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

package computer;/*** 技嘉的主板实现*/
public class GAMainBoard implements MainBoardApi {/*** CPU插槽的孔数*/private int cpuHoles = 0;/*** 构造方法, 传入CPU插糟的孔数*/public GAMainBoard(int cpuHoles) {this.cpuHoles = cpuHoles;}public void installCPU() {System.out.println("now in GAMainBoard, cpuHoles=" + cpuHoles);}
}

src\computer\MSIMainBoard.java

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

package computer;/*** 微星的主板实现*/
public class MSIMainBoard implements MainBoardApi {/*** CPU插槽的孔数*/private int cpuHoles = 0;/*** 构造方法, 传入CPU插糟的孔数*/public MSIMainBoard(int cpuHoles) {this.cpuHoles = cpuHoles;}public void installCPU() {System.out.println("now in MSIMainBoard, cpuHoles=" + cpuHoles);}
}

src\computer\CPUFactory.java

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

package computer;/*** 创立CPU的简略工厂*/
public class CPUFactory {/*** 创立CPU接口对象的方法* @param type 选择CPU类型的参数* @return CPU接口对象*/public static CPUApi createCPUApi(int type) {CPUApi cpu = null;// 根据参数来选择并创立相应的CPU对象if (1 == type) {cpu = new IntelCPU(1156);} else if (2 == type) {cpu = new AMDCPU(939);}return cpu;}
}

src\computer\MainBoardFactory.java

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

package computer;/*** 创立主板的简略工厂*/
public class MainBoardFactory {/*** 创立主板接口对象的方法* @param type 选择主板类型的参数* @return 主板接口对象*/public static MainBoardApi createMainBoardApi(int type) {MainBoardApi mainBoard = null;// 根据参数来选择并创立相应的主板对象if (1 == type) {mainBoard = new GAMainBoard(1156);} else if (2 == type) {mainBoard = new MSIMainBoard(939);}return mainBoard;}
}

src\computer\ComputerEngineer.java

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

每日一道理
天又快黑了,这座忙碌的城市又将入睡,让这劳累的“身躯”暂别白日的辛勤,让它入睡,陪伴着城市中的人们进入梦乡。当空的弯月正深情地注视着这座城市与城市中的人们,看着家家户户的灯渐渐熄灭,它在床头悄悄奏响“明月曲”……
package computer;/*** 装机工程师类*/
public class ComputerEngineer {/*** 组装呆板需要的CPU*/private CPUApi cpu = null;/*** 组装呆板需要的主板*/private MainBoardApi mainBoard= null;/*** 装机过程* @param cpuType 客户选择所需的CPU类型* @param mainBoardType 客户选择所需的主板类型*/public void makeComputer(int cpuType, int mainBoardType) {// 1: 首先准备好装机所需要的配件prepareHardwares(cpuType, mainBoardType);// 2: 组装呆板// 3: 测试呆板// 4: 交付客户}/*** 准备装机所需要的配件* @param cpuType 客户选择所需的CPU类型* @param mainBoardType 客户选择所需的主板类型*/public void prepareHardwares(int cpuType, int mainBoardType) {// 这里要去准备CPU和主板的具体实现,简略起见,这里只准备这两个// 可是,装机工程师并不知道如何去创立,怎么办呢?// 直接找相应的工厂获得this.cpu = CPUFactory.createCPUApi(cpuType);this.mainBoard = MainBoardFactory.createMainBoardApi(mainBoardType);// 测试一下配件是否好用this.cpu.calculate();this.mainBoard.installCPU();}
}

src\user\Client.java

~~~~~~~~~~~~~~~~~~~~

package user;import computer.ComputerEngineer;public class Client {public static void main(String[] args) {// 创立装机工程师对象ComputerEngineer engineer = new ComputerEngineer();// 告知装机工程师自己选择的配件,让装机工程师组装电脑engineer.makeComputer(1, 1);}
}

------------------------------------------------------------------------------------------------------------------

不应用模式时存在的问题 : 
CPU对象和主板对象是有关系的,是需要互相匹配的。

------------------------------------------------------------------------------------------------------------------

src\computer\AbstractFactory.java
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

package computer;/*** 抽象工厂的接口,声明创立抽象产品对象的操纵*/
public interface AbstractFactory {/*** 创立CPU的对象* @return CPU的对象*/public CPUApi createCPUApi();/*** 创立主板的对象* @return 主板的对象*/public MainBoardApi createMainBoardApi();
}

src\computer\Schema1.java

~~~~~~~~~~~~~~~~~~~~~~~~~

package computer;/*** 装机计划一:Intel的CPU + 技嘉的主板* 这里创立CPU和主板对象的时候,是对应的,能匹配上的*/
public class Schema1 implements AbstractFactory {public CPUApi createCPUApi() {return new IntelCPU(1156);}public MainBoardApi createMainBoardApi() {return new GAMainBoard(1156);}
}

src\computer\Schema2.java

~~~~~~~~~~~~~~~~~~~~~~~~~

package computer;/*** 装机计划二:AMD的CPU + 微星的主板* 这里创立CPU和主板对象的时候,是对应的,能匹配上的*/
public class Schema2 implements AbstractFactory {public CPUApi createCPUApi() {return new AMDCPU(939);}public MainBoardApi createMainBoardApi() {return new MSIMainBoard(939);}
}

src\computer\ComputerEngineer.java

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

package computer;/*** 装机工程师类*/
public class ComputerEngineer {/*** 组装呆板需要的CPU*/private CPUApi cpu = null;/*** 组装呆板需要的主板*/private MainBoardApi mainBoard= null;/*** 装机过程* @param schema 客户选择的装机计划*/public void makeComputer(AbstractFactory schema) {// 1: 首先准备好装机所需要的配件prepareHardwares(schema);// 2: 组装呆板// 3: 测试呆板// 4: 交付客户}/*** 准备装机所需要的配件* @param schema 客户选择的装机计划*/public void prepareHardwares(AbstractFactory schema) {// 这里要去准备CPU和主板的具体实现,简略起见,这里只准备这两个// 可是,装机工程师并不知道如何去创立,怎么办呢?// 应用抽象工厂来获得相应的接口对象this.cpu       = schema.createCPUApi();this.mainBoard = schema.createMainBoardApi();// 测试一下配件是否好用this.cpu.calculate();this.mainBoard.installCPU();}
}

src\user\Client.java

~~~~~~~~~~~~~~~~~~~~

package user;import computer.AbstractFactory;
import computer.ComputerEngineer;
import computer.Schema1;public class Client {public static void main(String[] args) {// 创立装机工程师对象ComputerEngineer engineer = new ComputerEngineer();// 客户选择并创立需要应用的装机计划AbstractFactory schema = new Schema1();// 告知装机工程师自己选择的装机计划,让装机工程师组装电脑engineer.makeComputer(schema);}
}

@@@抽象工厂模式的实现:

1. 实现成接口

@@@抽象工厂模式的优点:

1. 分离接口和实现

2. 使得切换产品簇变得轻易

@@@抽象工厂模式的缺点:

1. 不太轻易扩展新的产品

2. 轻易造成类层次复杂

@@@抽象工厂模式的本质:

选择产品簇的实现

@@@抽象工厂模式表现的设计原则:

依赖颠倒原则

起码知识原则

文章结束给大家分享下程序员的一些笑话语录: 这年头的互联网真是娱乐了中国,网民们从各种各样的“门”里钻来钻去,又有好多“哥”好多“帝”,值得大家品味不已……网络经典语录,关于IT与互联网,经典与您分享!

--------------------------------- 原创文章 By
装机和主板
---------------------------------

转载于:https://www.cnblogs.com/xinyuyuanm/archive/2013/06/01/3112947.html

装机主板抽象工厂模式(Abstract Factory)相关推荐

  1. 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)

    原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Facto ...

  2. 抽象工厂模式 Abstract Factory Pattern

    源地址 抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建 ...

  3. 设计模式 - 抽象工厂模式(abstract factory pattern) 详解

    抽象工厂模式(abstract factory pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/270916 ...

  4. 抽象工厂模式-Abstract Factory Pattern

    抽象工厂模式-Abstract Factory Pattern 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类.抽 ...

  5. 【设计模式】抽象工厂模式 Abstract Factory Pattern

    简单工厂模式是一个工厂类根据工厂方法的参数创建不出不同的产品, 工厂方法模式是每一个产品都有一个一一对应的工厂负责创建该产品.那么今天要讲的抽象工厂模式是一个工厂能够产生关联的一系列产品.抽象工厂模式 ...

  6. 【JAVA进阶系列】JAVA 设计模式 -- 抽象工厂模式(Abstract Factory)

    [JAVA进阶系列]JAVA 设计模式 -- 抽象工厂模式(Abstract Factory) [1.1]抽象工厂模式简介 抽象工厂者模式的类结构图 AbstractProduct(抽象产品),Abs ...

  7. 设计模式(20):创建型-抽象工厂模式(Abstract Factory)

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

  8. 设计模式之抽象工厂模式(Abstract Factory)摘录

    面向对象系统的分析和设计实际上追求的就是两点:高内聚(Cohesion)和低耦合(Coupling). 23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.Fa ...

  9. Net设计模式之抽象工厂模式(Abstract Factory Pattern)(1)

    一.抽象工厂模式简介(Bref Introduction) 抽象工厂模式(Abstract Factory Pattern),提供一个创建一系列相关或者相互依赖对象的接口,而无需制定他们的具体类.优点 ...

最新文章

  1. 【C++/C】【学习笔记】二分算法——处理“最小却最大”问题
  2. 『ORACLE』 配置共享服务器(11g)
  3. 【Xamarin 在Mac OS 上的部署安装环境】
  4. Linux 利用nginx源码编译安装nginx
  5. 揭秘:高盛交易员赚取10亿美元利润的神秘“利器”终于公开了
  6. 报错,但不影响运行ERROR: JDWP Unable to get JNI 1.2 environment, jvm-GetEnv() return code = -2...
  7. 微软HTTP API指南
  8. 【Quartz】深入Job、JobDetail、JobDataMap、Trigger
  9. 2018网易在线笔试题
  10. C++day02 学习笔记
  11. Docker快速入门(一)
  12. GD32芯片包下载和安装教程
  13. 如何免费搭建FTP服务器---金万维
  14. 中年网络工程师如何转型?
  15. OpenCV 常见问题解决方案
  16. GWO灰狼优化算法综述(Grey Wolf Optimization)
  17. 显示服务器人数已满,明日之后服务器人数已满怎么办 排队解决方法
  18. 处理jmeter tcp 取样器500错误
  19. qt写python教程视频_GitHub - qtg666/codeparkshare: Python初学者(零基础学习Python、Python入门)书籍、视频、资料、社区推荐...
  20. 蒹葭苍苍,白露为霜。

热门文章

  1. java--类型擦除
  2. 试题11 蒜头君的随机数(排序和去重)
  3. 数量场的等值面与矢量场的矢量线的一些基本的东西(写得不好)
  4. [BZOJ5010][FJOI2017]矩阵填数(状压DP)
  5. 用js内置对象XMLHttpRequest 来用ajax
  6. js中window的属性
  7. Linux下测试PHP和MySQL是否正确安装
  8. 基于dsp_builder的算法在FPGA上的实现
  9. WPF and Silverlight 学习笔记(二十二):使用代码实现绑定、绑定数据的验证
  10. 语音特征参数MFCC的提取过程