设计模式3--抽象工厂模式(Abstract Factory)
来源:互联网 发布:注册表编辑器删除软件 编辑:程序博客网 时间:2024/06/06 00:28
抽象工厂模式的本质:选择产品簇的实现
package com;public interface CPUApi {void calculate();}
package com.impl;import com.CPUApi;public class CPUImplA implements CPUApi { private int pins; public CPUImplA(int pins) {super();this.pins = pins;}public int getPins() {return pins;}public void setPins(int pins) {this.pins = pins;}@Overridepublic void calculate() {System.out.println("我是A的CPU,针数是:" + pins);}}
package com.impl;import com.CPUApi;public class CPUImplB implements CPUApi { private int pins; public CPUImplB(int pins) {super();this.pins = pins;}public int getPins() {return pins;}public void setPins(int pins) {this.pins = pins;}@Overridepublic void calculate() {System.out.println("我是B的CPU,针数是:" + pins);}}
package com;public interface MainBoardApi {void installCPU();}
package com.impl;import com.MainBoardApi;public class MainBoardImplA implements MainBoardApi { private int holes; public MainBoardImplA(int holes) {super();this.holes = holes;}public int getHoles() {return holes;}public void setHoles(int holes) {this.holes = holes;}@Overridepublic void installCPU() {System.out.println("我是A的主板,孔数是:" + holes);}}
package com.impl;import com.MainBoardApi;public class MainBoardImplB implements MainBoardApi { private int holes; public MainBoardImplB(int holes) {super();this.holes = holes;}public int getHoles() {return holes;}public void setHoles(int holes) {this.holes = holes;}@Overridepublic void installCPU() {System.out.println("我是B的主板,孔数是:" + holes);} }
import com.CPUApi;import com.MainBoardApi;public abstract class AbstractFactory {public abstract CPUApi getCPU();public abstract MainBoardApi getMainBoard();}
import com.CPUApi;import com.MainBoardApi;import com.impl.CPUImplA;import com.impl.MainBoardImplA;public class FactoryA extends AbstractFactory{@Overridepublic CPUApi getCPU() {return new CPUImplA(776);}@Overridepublic MainBoardApi getMainBoard() {return new MainBoardImplA(776);}}
import com.CPUApi;import com.MainBoardApi;import com.impl.CPUImplB;import com.impl.MainBoardImplB;public class FactoryB extends AbstractFactory{@Overridepublic CPUApi getCPU() {return new CPUImplB(1024);}@Overridepublic MainBoardApi getMainBoard() {return new MainBoardImplB(1024);}}
import com.CPUApi;import com.MainBoardApi;public class ComputerEngineer {CPUApi cpu = null;MainBoardApi mainBoard = null;public void makeComputer(String schema) {// 1 准备硬件prepareHardwares(schema);// 2 组装电脑// 3 测试// 4 交付客户}private void prepareHardwares(String schema){if("A".equals(schema)){cpu = new FactoryA().getCPU();mainBoard = new FactoryA().getMainBoard();}else if("B".equals(schema)){cpu = new FactoryB().getCPU();mainBoard = new FactoryB().getMainBoard();}cpu.calculate();mainBoard.installCPU();}}
public class Client {public static void main(String[] args){ComputerEngineer e = new ComputerEngineer();e.makeComputer("A");}}
1 抽象工厂模式的本质工厂方法是选择单个产品的实现,虽然一个类里面可以有多个工厂方法,但是这些方法之间一般是没有联系的,即使看起来像有联系。
但是抽象工厂着重的就是为一个产品簇选择实现,定义在抽象工厂里面的方法通常是有联系的,它们是产品的某一部分或者相互依赖的。如果抽象工厂里面只定义一个方法,直接创建产品,那么就退化称为工厂方法了。
2 何时选用抽象工厂模式
1 如果希望一个系统独立于它的产品创建、组合和表示的时候。换句话说,希望一个系统只知道产品的接口,而不关心实现的时候。
2 如果一个系统要有多个产品系列中的一个来配置的时候,换句话说,就是可以动态地产品簇的时候。
3 如果要强调一系列相关产品的接口,以便联合使用它们的时候。
- 抽象工厂(Abstract Factory)设计模式
- 设计模式-抽象工厂(Abstract Factory)
- 抽象工厂(Abstract Factory)设计模式
- 设计模式-抽象工厂(Abstract Factory)
- 设计模式(3)抽象工厂模式(Abstract Factory)
- 设计模式3:Abstract Factory Pattern(抽象工厂模式)
- 设计模式3--抽象工厂模式(Abstract Factory)
- 设计模式(3):抽象工厂模式(Abstract Factory Pattern)
- 设计模式 一 抽象工厂Abstract Factory(工厂模式)
- 设计模式-抽象工厂模式(Abstract Factory)
- 设计模式:抽象工厂模式(Abstract Factory)
- 3抽象工厂模式(Abstract Factory)
- 设计模式(3)-抽象工厂模式(Abstract Factory)
- .Net设计模式之抽象工厂模式(Abstract Factory)
- .NET设计模式:抽象工厂模式(Abstract Factory)
- .NET设计模式-抽象工厂模式(Abstract Factory)
- .NET设计模式:抽象工厂模式(Abstract Factory)
- 设计模式(二)之Abstract Factory - 抽象工厂模式
- linux查看和调整tcp最大可用连接数
- Object-C------NSString的用法
- Android FM调试文档
- 微cms,微信营销功能介绍
- 安卓高效开发:数据库基本
- 设计模式3--抽象工厂模式(Abstract Factory)
- 微联微信管理平台软--- 微信营销平台运营首选的平台软件
- java中try 与catch的使用
- 日期SQL 脚本
- LOAD DATA
- 自动工作负载库(Automatic Workload Repository,AWR)
- C/C++中extern关键字详解
- 如何设置网页打开时自动执行某个javascript程序?
- 有用的正则验证,转自互联网