设计模式----抽象工厂模式

mac2026-10-01  6

抽象工厂模式

         抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。          在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。


下面我写了一个电脑 cpu 键盘 鼠标的例子

定义产品接口 package com.jbc.itface; /* * 定义产品的接口,公共的方法。便于实际的产品类实现。 */ public interface Cpu { public void coolingCapacity(); public void efficiency(); } package com.jbc.itface; public interface Keyboard { public void facade(); } package com.jbc.itface; public interface Mouse { public void sensitivity(); } 定义产品接口实现类 package com.jbc.abstractproduct; import com.jbc.itface.Cpu; public class AcerCpu implements Cpu{ @Override public void coolingCapacity() { System.out.println("宏碁的cpu散热好"); } @Override public void efficiency() { System.out.println("宏碁的cpu运行效率一般"); } } package com.jbc.abstractproduct; import com.jbc.itface.Keyboard; public class AcerKeyboard implements Keyboard { @Override public void facade() { System.out.println("宏碁的键盘外观设计的一般,但耐磨损"); } } package com.jbc.abstractproduct; import com.jbc.itface.Mouse; public class AcerMouse implements Mouse { @Override public void sensitivity() { System.out.println("宏碁的鼠标灵敏度强"); } } package com.jbc.abstractproduct; import com.jbc.itface.Cpu; public class HuashuoCpu implements Cpu { @Override public void coolingCapacity() { System.out.println("华硕cpu的散热一般"); } @Override public void efficiency() { System.out.println("华硕cpu的运行效率高"); } } package com.jbc.abstractproduct; import com.jbc.itface.Keyboard; public class HuashuoKeyboard implements Keyboard { @Override public void facade() { System.out.println("华硕键盘的外观线条比较流畅,打击感强"); } } package com.jbc.abstractproduct; import com.jbc.itface.Mouse; public class HuashuoMouse implements Mouse { @Override public void sensitivity() { System.out.println("华硕的鼠标灵敏度也不错"); } } 定义工厂接口 package com.jbc.itface; /* * 定义工厂接口 */ public interface ComputerAbstarctFactory { public Cpu createCpu(); public Keyboard createKeyboard(); public Mouse createMouse(); } 定义工厂接口实现类 package com.jbc.abstractfactory; import com.jbc.abstractproduct.AcerCpu; import com.jbc.abstractproduct.AcerKeyboard; import com.jbc.abstractproduct.AcerMouse; import com.jbc.itface.ComputerAbstarctFactory; import com.jbc.itface.Cpu; import com.jbc.itface.Keyboard; import com.jbc.itface.Mouse; public class AcerFactory implements ComputerAbstarctFactory { @Override public Cpu createCpu() { return new AcerCpu(); } @Override public Keyboard createKeyboard() { return new AcerKeyboard(); } @Override public Mouse createMouse() { return new AcerMouse(); } } package com.jbc.abstractfactory; import com.jbc.abstractproduct.HuashuoCpu; import com.jbc.abstractproduct.HuashuoKeyboard; import com.jbc.abstractproduct.HuashuoMouse; import com.jbc.itface.ComputerAbstarctFactory; import com.jbc.itface.Cpu; import com.jbc.itface.Keyboard; import com.jbc.itface.Mouse; /** * 一个产品族下面的工厂,创建产品对象实例 * @author sharbee * */ public class HuashuoFactory implements ComputerAbstarctFactory{ @Override public Cpu createCpu() { return new HuashuoCpu(); } @Override public Keyboard createKeyboard() { return new HuashuoKeyboard(); } @Override public Mouse createMouse() { return new HuashuoMouse(); } } 测试抽象工厂设计模式 package com.jbc.test; import com.jbc.abstractfactory.AcerFactory; import com.jbc.abstractfactory.HuashuoFactory; import com.jbc.itface.ComputerAbstarctFactory; import com.jbc.itface.Cpu; import com.jbc.itface.Keyboard; public class TestAbstarctFactoryPattern { public static void main(String[] args) { //宏碁电脑属于电脑这个大工厂 ComputerAbstarctFactory cafAcer =new AcerFactory();//创建产品族下面的某个工厂对象 Cpu acerc =cafAcer.createCpu();//根据工厂对象创建具体的产品对象 Keyboard acerk =cafAcer.createKeyboard();//根据工厂对象创建具体的产品对象 acerc.coolingCapacity(); acerk.facade(); //华硕电脑也属于电脑这个大工厂 ComputerAbstarctFactory caf =new HuashuoFactory();//创建产品族下面的某个工厂对象 Cpu hsc =caf.createCpu();//根据工厂对象创建具体的产品对象 Keyboard hsk =caf.createKeyboard();//根据工厂对象创建具体的产品对象 hsc.coolingCapacity(); hsk.facade(); } }
最新回复(0)