java设计模式连载(2) --抽象工厂模式
意图:
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
适用性:
- 一个系统要独立于它的产品的创建、组合和表示时。
- 一个系统要由多个产品系列中的一个来配置时。
- 当你要强调一系列相关的产品对象的设计以便进行联合使用时。
- 当你提供一个产品类库,而只想显示它们的接口而不是实现时。
实例:
1. 抽象计算机器件工厂接口
package Abstract_Factory_Pattern;
public interface ComputerFactory {
public CPU createCpu();
public Displayer createDisplayer();
}
2. 实现上面的接口 具体的生产新,旧器件工厂
package Abstract_Factory_Pattern;
public class NewComputerFactory implements ComputerFactory{
@Override
public CPU createCpu() {
return new NewCup();
}
@Override
public Displayer createDisplayer() {
return new NewDisplayer();
}
}
package Abstract_Factory_Pattern;
public class OldComputerFactory implements ComputerFactory{
@Override
public CPU createCpu() {
return new OldCpu();
}
@Override
public Displayer createDisplayer() {
return new OldDisplayer();
}
}
3. 定义一个CPU接口,一个显示器接口
package Abstract_Factory_Pattern;
public interface CPU {
public void price();
}
package Abstract_Factory_Pattern;
public interface Displayer { //显示器接口
public void price();
}
4. 实现上面两个接口
package Abstract_Factory_Pattern;
public class NewCup implements CPU{
@Override
public void price(){
System.out.println("新CPU 贵");
}
}
package Abstract_Factory_Pattern;
public class OldCpu implements CPU{
@Override
public void price() {
System.out.println("旧的CPU 便宜");
}
}
package Abstract_Factory_Pattern;
public class NewDisplayer implements Displayer{
@Override
public void price(){
System.out.println("新的显示器 贵!");
}
}
package Abstract_Factory_Pattern;
public class OldDisplayer implements Displayer{
@Override
public void price(){
System.out.println("旧的显示器 便宜");
}
}
5. 测试这个模式
package Abstract_Factory_Pattern;
public class Client {
public static void main(String[] args){
ComputerFactory computerFactory = new NewComputerFactory();
computerFactory.createCpu().price(); //新式计算机期间的厂生产出贵的
computerFactory.createDisplayer().price();
computerFactory = new OldComputerFactory();
computerFactory.createCpu().price(); //老式计算机期间的厂生产出便宜的
computerFactory.createDisplayer().price();
}
}
6 . 多谢浏览,欢迎斧正。