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

抽象工厂模式

         抽象工厂模式(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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值