抽象工厂模式:所有形态的工厂模式中最为抽象和最具一般性的一种形态
主要解决借口选择问题。
何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。
如何解决:在一个产品族里面,定义多个产品。
关键代码:在一个工厂里聚合多个同类产品。
优点:当一个产品族中的多个对象被设计成一起工作时,它能保证客户端
始终只使用同一个产品族中的对象。
缺点:产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码。
使用场景: 1、QQ 换皮肤,一整套一起换。 2、生成不同操作系统的程序
注意事项:产品族难扩展,产品等级易扩展。
实现:
1.为形状创建一个接口。
public interfac shape{
void draw();
}
2.创建实现接口的实体类。
public class Rectangle implements shape{
@Override
public void draw(){
System.out.println("Inside Rectangle::drow() method.");
}
}
3.为颜色创建一个接口
public interface Color{
void fill();
}
4.创建实现接口的实体类。
public class Red implements Color{
@Override
public void fill(){
System.out.println("Inside Red::fill() method.");
}
}
5.为color和Shape对象创建抽象类来获取工厂。
public abstract class AbstractFactory{
public abstract Color getColor(String color);
public abstract Color getShape(String shape);
}
后面省略------------------
主要解决借口选择问题。
何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。
如何解决:在一个产品族里面,定义多个产品。
关键代码:在一个工厂里聚合多个同类产品。
优点:当一个产品族中的多个对象被设计成一起工作时,它能保证客户端
实现:
1.为形状创建一个接口。
public interfac shape{
void draw();
}
2.创建实现接口的实体类。
public class Rectangle implements shape{
@Override
public void draw(){
System.out.println("Inside Rectangle::drow() method.");
}
}
3.为颜色创建一个接口
public interface Color{
void fill();
}
4.创建实现接口的实体类。
public class Red implements Color{
@Override
public void fill(){
System.out.println("Inside Red::fill() method.");
}
}
5.为color和Shape对象创建抽象类来获取工厂。
public abstract class AbstractFactory{
public abstract Color getColor(String color);
public abstract Color getShape(String shape);
}
后面省略------------------
始终只使用同一个产品族中的对象。
缺点:产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码。
使用场景: 1、QQ 换皮肤,一整套一起换。 2、生成不同操作系统的程序
注意事项:产品族难扩展,产品等级易扩展。
实现:
1.为形状创建一个接口。
public interfac shape{
void draw();
}
2.创建实现接口的实体类。
public class Rectangle implements shape{
@Override
public void draw(){
System.out.println("Inside Rectangle::drow() method.");
}
}
3.为颜色创建一个接口
public interface Color{
void fill();
}
4.创建实现接口的实体类。
public class Red implements Color{
@Override
public void fill(){
System.out.println("Inside Red::fill() method.");
}
}
5.为color和Shape对象创建抽象类来获取工厂。
public abstract class AbstractFactory{
public abstract Color getColor(String color);
public abstract Color getShape(String shape);
}
后面省略------------------