抽象工厂模式
抽象工厂模式(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();
}
}