抽象工厂模式

应用场景:

 1.一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节,这对于所有形态的工厂模式都是重要的。

 2.这个系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。

 3.同属于同一个产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来。(比如:Intel主板必须使用Intel CPU、Intel芯片组)

 

com.android.abstract_factory.bean包下

 

/**
 * 定义cpu接口
 * @author Administrator
 *
 */
public interface Cpu {
 public void calculate();
}

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

/**
 * Intel CPU
 * @author Administrator
 *
 */
public class IntelCpu implements Cpu{
 private int pins;

 @Override
 public void calculate() {
  System.out.println("Intel Cpu针脚数:"+pins);
 }
 
 public IntelCpu(int pins){
  this.pins = pins;
 }
}

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

/**
 * AMD CPU
 * @author Administrator
 *
 */
public class AmdCpu implements Cpu{
 private int pins;

 @Override
 public void calculate() {
  System.out.println("AMD Cpu针脚数:"+pins);
 }
 
 public AmdCpu(int pins){
  this.pins = pins;
 }
}

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

/**
 * 定义主板接口
 * @author Administrator
 *
 */
public interface MainBoard {
 public void installCpu();
}

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

/**
 * Intel 主板
 * @author Administrator
 *
 */
public class IntelMainBoard implements MainBoard {

 private int cpuHoles =0;
 
 @Override
 public void installCpu() {
  System.out.println("Intel 主板的CPU插槽数是:"+cpuHoles);
 }

 public IntelMainBoard(int cpuHoles) {
  super();
  this.cpuHoles = cpuHoles;
 }
}

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

/**
 * AMD 主板
 * @author Administrator
 *
 */
public class AmdMainBoard implements MainBoard {

 private int cpuHoles =0;
 
 @Override
 public void installCpu() {
  System.out.println("AMD 主板的CPU插槽数是:"+cpuHoles);
 }

 public AmdMainBoard(int cpuHoles) {
  super();
  this.cpuHoles = cpuHoles;
 }
}

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

com.android.abstract_factory包下

/**
 * 抽象工厂
 * @author Administrator
 *
 */
public interface AbstractFactory {
 public Cpu createCpu();
 public MainBoard createMainBoard();
}

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

/**
 * 定义Intel 工厂,使得cpu和主板相联系
 * @author Administrator
 *
 */
public class IntelFactory implements AbstractFactory {

 @Override
 public Cpu createCpu() {
  return new IntelCpu(755);
 }

 @Override
 public MainBoard createMainBoard() {
  return new IntelMainBoard(755);
 }
}

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

/**
 * 定义AMD 工厂,使得cpu和主板相联系
 * @author Administrator
 *
 */
public class AmdFactory implements AbstractFactory {

 @Override
 public Cpu createCpu() {
  return new AmdCpu(938);
 }

 @Override
 public MainBoard createMainBoard() {
  return new AmdMainBoard(938);
 }
}

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

/**
 * 装机工程师
 * @author Administrator
 *
 */
public class ComputerEngineer {
 private Cpu cpu = null;
 private MainBoard mainBoard = null;
 
 public void makeComputer(AbstractFactory abstractFactory){
  prepare(abstractFactory);
 }

 private void prepare(AbstractFactory abstractFactory) {
  cpu = abstractFactory.createCpu();
  mainBoard = abstractFactory.createMainBoard();
 
  cpu.calculate();
  mainBoard.installCpu();
 }
}

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

/**
 * 测试类
 * @author Administrator
 *
 */
public class Test {
 public static void main(String[] args) {
  ComputerEngineer engineer = new ComputerEngineer();
  
  engineer.makeComputer(new IntelFactory());
  
  engineer.makeComputer(new AmdFactory());
 }
}


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值