package com.yq1012.创建型模式.工厂方法.抽象工厂; public class AMD implements CPU{ public String getCPU(){ return "Athlon XP 2008+"; } } package com.yq1012.创建型模式.工厂方法.抽象工厂; public abstract class ComputerFactory{ CPU cpu; HardDisk hd; MainBoard mb; public void show(){ try{ System.out.println(this.getClass().getName() .toString () + ("生产的电脑配置")); System.out.println ("CPU:" + cpu.getCPU ()); System.out.println ("HardDisk:"+ hd.getSize ()); System.out.print ("MainBoard:"); mb.Attach(cpu); } catch(Exception e){ System.err.println(e.getMessage()); } } } package com.yq1012.创建型模式.工厂方法.抽象工厂; public interface CPU{ public String getCPU(); } package com.yq1012.创建型模式.工厂方法.抽象工厂; public class DellFactory extends ComputerFactory{ DellFactory(){ cpu = new AMD(); hd = new Maxtor(); mb = new MSIK7N2G(); } } package com.yq1012.创建型模式.工厂方法.抽象工厂; public interface HardDisk{ public String getSize(); } package com.yq1012.创建型模式.工厂方法.抽象工厂; public class IBMFactory extends ComputerFactory{ IBMFactory(){ cpu = new Intel(); hd = new WestDigit(); mb = new MSI865PE(); } } package com.yq1012.创建型模式.工厂方法.抽象工厂; public class Intel implements CPU{ public String getCPU(){ return "奔腾4 3.2C"; } } package com.yq1012.创建型模式.工厂方法.抽象工厂; public interface MainBoard{ public void Attach(CPU cpu) throws Exception; } package com.yq1012.创建型模式.工厂方法.抽象工厂; public class Maxtor implements HardDisk{ public String getSize(){ return "MaXLine Plus II 200G"; } } package com.yq1012.创建型模式.工厂方法.抽象工厂; //主板微星MSI865PE,支持Intel的CPU: public class MSI865PE implements MainBoard{ public void Attach(CPU cpu) throws Exception{ if(cpu.getClass ().toString ().endsWith("Intel")){ System.out.println("MSI865PE"); } else{ throw new Exception("主板MSI865PE只能配Intel的 CPU"); } } } package com.yq1012.创建型模式.工厂方法.抽象工厂; public class MSIK7N2G implements MainBoard{ public void Attach(CPU cpu) throws Exception{ if(cpu.getClass ().toString ().endsWith("AMD")){ System.out.println("MSIK7N2G"); } else{ throw new Exception("主板MSIK7N2G只能配AMD的CPU"); } } } package com.yq1012.创建型模式.工厂方法.抽象工厂; public class Test { public static void main(String[] args) { // 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 // 举一个电脑产品的例子吧: // IBM,Dell都是著名的计算机生产厂家,他们采用的主板、硬盘及CPU是不相同的, // 但是配件间、主板与CPU一定要相互兼容,例如下面例子中的微星MSIK7N2G配AMD的CPU;微星MSI865PE配Intel的CPU。 // 如图中所示,ComputerFactory是抽象工厂,Dell和IBM是生产产品的工厂 // ;CPU、HardDisk、MainBoard是抽象产品,CPU的型号又分许多种。具体实现见代码: // IBMFactory ibm = new IBMFactory(); ibm.show(); DellFactory dellFactory = new DellFactory(); dellFactory.show(); } // 抽象工厂模式:前面工厂方法模式是比较具体的,是猫肯定生的是小猫,这是不会有问题的 // ,是具体的,那么抽象工厂它所产生的就不是那么具体,产生的对象可能是没有共同特性的。 // 譬如说 一只奶羊不仅仅能够生小羊,同时也能生产羊奶,但小羊是动物,羊奶是食物。 } package com.yq1012.创建型模式.工厂方法.抽象工厂; public class WestDigit implements HardDisk{ public String getSize(){ return "WD2500JD 250G"; } }
来源
http://zhidao.baidu.com/question/340211082.html
http://c.hiphotos.baidu.com/zhidao/pic/item/a08b87d6277f9e2fe53e1d4e1f30e924b899f369.jpg
http://www.iteye.com/problems/2271