Abstract Factory--对象创建型模式
一个类创建模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象。
意图 :提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的实现类
结构:例子如下

这样客户调用这些操作已获得组件实例,但是客户并不知道他们使用的是哪些具体类
适用性:
一个系统要独立于它的产品的创建、组合和表示时。
一个系统要由多个产品系列中的一个配置时。
当你要强调一系列相关产品对象的设计以便进行联合使用时。
当你提供一个产品类库,而只想显示他们的接口而不是实现时。
效果:
它分离了具体的类
它使得易于交换产品系列
它有利于产品的一致性
难以支持新种类的产品(支持新种类的产品就需要扩展该工厂的接口,这将涉及到Abstract Factory类及其子类的改变)
实现:
将工厂作为一个单例模式
Abstract Factory仅声明一个创建产品的接口。为每个产品顶一个工厂方法。要求每个产品系列都要有一个新的具体工厂子类
public abstract class ComputerFactory {
public abstract zhuban createA();
public abstract xianka createB();
}
class DellFactory extends ComputerFactory{
public zhuban createA() {
return new A();
}
public xianka createB() {
return new B();
}
}
class AcerFactory extends ComputerFactory{
public zhuban createA() {
return new A1();
}
public xianka createB() {
return new B1();
}
}
class ThinkPadFactory extends ComputerFactory{
public zhuban createA() {
return new A1();
}
public xianka createB() {
return new B1();
}
public C shubiao(){
return new C();
}
}
class zhuban{}
class xianka{}
class A extends zhuban{}
class A1 extends zhuban{}
class B extends xianka{}
class B1 extends xianka{}
class C{}
有几个疑问?
当我使用Spring注入Computer的时候,如果注入的是ThinkPadFactory,这个C怎么取得?
当我使用Spring注入ThinkPadFactory的时候,到时如果要替换Factory时候,难道要改代码?
有什么好的方法解决,或什么好的思路
浙公网安备 33010602011771号